Commit Graph
17 Commits
Author SHA1 Message Date
Pierre MartinandClaude Opus 4.8 596b5e22fd feat: show the event time range, not just its start
Pierre's field test: the agenda announces "10:30 → 12:30", the list only
said "à 10:30". The end date was already parsed and already in the
payload; it was purely missing from the display.

Naively rendering start → end would have been wrong four ways, all
measured against the real parser:
- no DTEND: the parser sets fin === debut, so "de 10:30 à 10:30"
- crossing midnight: "samedi de 22:00 à 02:00" hides the end date
- all-day: DTEND is EXCLUSIVE (RFC 5545), so a one-day event carries
  the next day, and a 18→20 festival carries the 21st

The last one is the dangerous one: it yields a wrong date, not just an
ugly one. The end day is therefore fin minus one day, computed from
local components since a floating date has no timezone.

DECISIONS.md records the exclusive DTEND for the sibling task, which
fills the town hall's end date field straight from DTEND.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 11:55:23 +02:00
Pierre MartinandClaude Opus 4.8 f994bfac30 docs: record the list to content script seam (T1)
Documents the single storage key (revising the sibling task's "key =
uid" seam, which had no way to transport the uid), the explicit ISO
serialisation, and why the café fallback is display-only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 18:23:38 +02:00
Pierre MartinandClaude Opus 4.8 532c17747f refactor: drop the now dead compterEvenements helper
It existed as T1's proof of life; the rendered list proves it better.
liste.js was its only caller and no longer counts VEVENTs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 18:23:38 +02:00
Pierre MartinandClaude Opus 4.8 3d86330894 feat: list upcoming events with a create button
The list page now parses the calendar feed and renders each upcoming
event (title, date, place) in chronological order, with a button that
hands the event over to the town hall form.

Sorting, date formatting and the café fallback live in a pure
presentation module rather than in liste.js, which touches the DOM and
cannot be imported under bun test. The seam to the sibling task's
content script lives in transfert.js: a single storage slot, since a
content script running on the town hall site has no way to learn a uid.
The deposit is awaited before opening the tab, otherwise the content
script could read before the write lands.

Test timezone is pinned to Europe/Paris: date formatting is the core
logic here and would otherwise pass only on machines set to Paris.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 18:23:38 +02:00
Pierre Martin d1a1c194bb Merge branch 'fetch-parse-le-flux-ics-oea8' 2026-07-14 17:55:31 +02:00
Pierre MartinandClaude Opus 4.8 c493349e4a docs: capitalize iCalendar parser solution (T1)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 01:26:32 +02:00
Pierre MartinandClaude Opus 4.8 2a25f1c34e docs: record iCalendar parser decisions (T1)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 01:18:29 +02:00
Pierre MartinandClaude Opus 4.8 1878ba08ec feat: parse iCalendar feed into Event[] (T1)
Add a pure parser parserEvenements(flux, aujourdhui) backed by vendored
ical.js v2.2.1 (ESM, no build). Returns events at the frozen Event contract
{ uid, titre, description, lieu, debut, fin, categories, journeeEntiere }:

- register embedded VTIMEZONE before toJSDate (correct offset, e.g. Africa/Lagos)
- dedupe by UID, keep the master (RECURRENCE-ID exceptions ignored)
- filter to today and future (local start of day)
- coerce missing text fields to ""

Edge cases deferred to T3 (RRULE expansion, all-day hour) are documented.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 01:18:29 +02:00
Pierre Martin fd28d3b2d3 Merge branch 'trouver-l-url-ical-publique-nextcloud-o42d' 2026-06-30 00:34:35 +02:00
Pierre MartinandClaude Opus 4.8 b359902c69 docs: capitalize CalDAV feed reading solution (T1)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:20:45 +02:00
Pierre MartinandClaude Opus 4.8 b27bb478bf feat: show calendar fetch state on the list page
Orchestrate the feed retrieval from the list page: loading / success
(event count) / actionable French error states with a Réessayer button
and an Ouvrir Nextcloud link when the session is missing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:07:43 +02:00
Pierre MartinandClaude Opus 4.8 1432aba561 feat: read raw iCalendar feed via browser session
Isolated CalDAV transport module that reuses the browser's Nextcloud
session (cookies, no stored password). Returns a discriminated result
and detects the HTTP-200 login-page redirect by sniffing the body for
BEGIN:VCALENDAR. compterEvenements counts real VEVENT line starts as the
T1 proof of life.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:07:43 +02:00
Pierre Martin 4889a9931a Merge branch 'squelette-de-l-extension-firefox-cubi' 2026-06-29 23:54:40 +02:00
Pierre MartinandClaude Opus 4.8 ade15c5635 docs: capitalize Firefox extension skeleton solution
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:51:48 +02:00
Pierre MartinandClaude Opus 4.8 5aa8ea2b0b docs: document dev install of the Firefox extension
Load via about:debugging as a temporary add-on (extension/manifest.json),
note its volatility across restarts, and add the web-ext lint command.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:41:53 +02:00
Pierre MartinandClaude Opus 4.8 0b1c022247 feat: scaffold Firefox extension skeleton with manifest validation tests
Manifest V3 (Firefox keys: background.scripts, host_permissions), a
background event page that opens a standalone list page on toolbar
click, and the placeholder list page (HTML/CSS/JS vanilla). No build
step. extension.test.ts validates manifest shape and referenced files.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:40:48 +02:00
Pierre MartinandClaude Sonnet 4.6 328df2d181 Initialise le projet : documentation et squelette
Extension Firefox pour publier une sélection d'événements du calendrier
Nextcloud de L'Atelier du Huit vers l'agenda de la mairie de Cugnaux.

- README : vue d'ensemble et installation
- CLAUDE.md : guide agent et contraintes structurantes
- docs/RECHERCHE.md : faits techniques vérifiés (CalDAV, formulaire, agenda, ICS)
- docs/DECISIONS.md : choix d'architecture et leur pourquoi
- package.json : Bun comme outil de dev minimaliste (pas de build au runtime)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 23:40:13 +02:00