feat(heimdall): prise de RDV publique → Valkyrie (booking souverain) #22

Merged
kevin merged 1 commit from feat/heimdall-booking into main 2026-07-16 21:45:33 +00:00
Owner

Plugin backend-only Heimdall : prise de RDV publique depuis scarletwolf.ai → carte sur le tableau Valkyrie « RDV pro » du propriétaire.

  • 3 routes publiques (/public/slots, /public/book, /public/ics/<token>) exemptées via PUBLIC_PREFIXES (pattern feed Valkyrie), cap body 10 Mo
  • Fail-closed : 503 tant que GUNGNIR_HEIMDALL_OWNER_ID n'est pas configuré ; owner fixé côté serveur
  • Créneaux calculés dans le fuseau propriétaire (DST testé été/hiver), réservation atomique (contrainte unique → 409)
  • Texte visiteur enrobé wrap_untrusted AU STOCKAGE (P0.2) ; quotas slowapi IP réelle + IP-hashée/jour + global/jour + honeypot
  • RGPD : PgSink + resolver + RGPD.md, purge applicative J+90 ; IP jamais en clair
  • Notification canal best-effort (jamais bloquante) ; 17 tests verts, suite complète = échecs identiques à main (préexistants env)

Activation prod = variable d'env + proxy nginx côté site (étape séparée, hors release).

🤖 Generated with Claude Code

Plugin backend-only **Heimdall** : prise de RDV publique depuis scarletwolf.ai → carte sur le tableau Valkyrie « RDV pro » du propriétaire. - 3 routes publiques (`/public/slots`, `/public/book`, `/public/ics/<token>`) exemptées via `PUBLIC_PREFIXES` (pattern feed Valkyrie), cap body 10 Mo - Fail-closed : 503 tant que `GUNGNIR_HEIMDALL_OWNER_ID` n'est pas configuré ; owner fixé côté serveur - Créneaux calculés dans le fuseau propriétaire (DST testé été/hiver), réservation atomique (contrainte unique → 409) - Texte visiteur enrobé `wrap_untrusted` AU STOCKAGE (P0.2) ; quotas slowapi IP réelle + IP-hashée/jour + global/jour + honeypot - RGPD : PgSink + resolver + RGPD.md, purge applicative J+90 ; IP jamais en clair - Notification canal best-effort (jamais bloquante) ; 17 tests verts, suite complète = échecs identiques à main (préexistants env) Activation prod = variable d'env + proxy nginx côté site (étape séparée, hors release). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(heimdall): plugin de prise de RDV publique → tableau Valkyrie « RDV pro »
All checks were successful
CI / Backend — pytest (pull_request) Successful in 58s
CI / i18n — usage → locales (pull_request) Successful in 5s
0db7f2a4af
Backend-only, fail-closed (inerte sans GUNGNIR_HEIMDALL_OWNER_ID).
3 routes publiques (slots calculés dans le fuseau propriétaire DST
compris, réservation atomique par contrainte unique, .ics horodaté
par token) exemptées via PUBLIC_PREFIXES, cap body 10 Mo, slowapi
par IP réelle + quotas métier IP-hashée/jour et global/jour +
honeypot. Texte visiteur enrobé wrap_untrusted AU STOCKAGE ; carte
Valkyrie origin=heimdall + notification canal best-effort ;
déclaration RGPD (PgSink + resolver + RGPD.md) et purge J+90.
17 tests (forme, moteur de créneaux, flux de réservation sqlite).
Config et sécurité documentées dans le plugin (docstrings).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kevin merged commit cd9b30a3c0 into main 2026-07-16 21:45:33 +00:00
kevin deleted branch feat/heimdall-booking 2026-07-16 21:45:34 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kevin/Gungnir!22
No description provided.