Skip to content

Conversation

@yhru
Copy link
Collaborator

@yhru yhru commented Sep 26, 2025

Benoit-MINT and others added 30 commits December 4, 2024 11:12
perf(combobox): display only first 200 elements
…iees/add-duration-to-extend-expiration-button-for-user-ldu

ETQ usager - j'aimerais avoir plus d'infos sur la durée de l'extension de la conservation de mon dossier
…-sentry-errors

fix(sentry): catch some js network errors
@claude
Copy link

claude bot commented Oct 3, 2025

Code Review - PR #192: Upstream Integration

Summary: This PR integrates 6 upstream releases (2025-02-20-01 through 2025-02-21-03). Overall quality is good with important refactoring of the dossier editing workflow.

STRENGTHS:

  1. Well-Structured Refactoring
  • forked_with_changes? → user_buffer_changes? improves clarity
  • en_construction_for_editor? better indicates dossier state
  • Backward compatibility maintained with fallback to old methods
  1. PF-Specific Code Preserved
  • All # pf: tags correctly maintained
  • TAHITI/SIRET handling intact (users/dossiers_controller.rb:209,223,227,239)
  • Deferred notifications preserved (lines 437,464)
  1. User Experience Improvements
  • RNA field status messages with organization details
  • CSV import limit increased (1,000 → 5,000 lines)
  • Better dropdown components for instructeurs

IMPORTANT CONCERNS:

  1. Ruby Version Upgrade (3.3.6 → 3.4.2)
    Action items before merge:
  1. Stacked PR Architecture
    Base branch: feature/bump-2025-02-18-01 (not masterpf)
  1. Stream-Based Edit Tracking
    New architecture introduces:
  • MAIN_STREAM (canonical dossier state)
  • USER_BUFFER_STREAM (uncommitted changes)
  • HISTORY_STREAM (historical record)

Verify:

  • Stream infrastructure is fully functional
  • Migration from fork-based system is complete
  • No regressions in dossier editing
  1. French Quote Consistency
    Per CLAUDE.md, verify new French strings use French apostrophe not ASCII apostrophe in locale files.

SECURITY & PERFORMANCE:

Security: Access control patterns preserved correctly, no obvious bypass risks
Performance: Check champs_on_user_buffer_stream efficiency and N+1 queries

PRE-MERGE CHECKLIST:

Critical:

  • PR Feature/bump 2025 02 18 01 #191 merged first
  • bundle exec rspec passes
  • bundle exec rails lint passes
  • Ruby 3.4.2 verified in CI
  • PF features tested (TAHITI, DN, communes)

Important:

  • Manual testing of dossier workflows
  • CSV import with 5,000 lines tested
  • RNA field validation checked

Documentation:

  • Add stream architecture notes to CLAUDE.md
  • Document fork deprecation timeline

RECOMMENDATION: APPROVE WITH CONDITIONS

Well-executed upstream integration. Code quality is good, PF concerns properly addressed.

Before merge: Ensure base PR #191 merged, tests pass with Ruby 3.4.2, manual workflow testing complete.

After merge: Monitor production, plan fork deprecation, update team docs on streams.

Review conducted per CLAUDE.md guidelines for upstream integration.

@yhru yhru requested a review from maatinito October 13, 2025 08:37
@yhru yhru self-assigned this Oct 13, 2025
@yhru yhru added the version upgrade montée de version label Oct 13, 2025
Base automatically changed from feature/bump-2025-02-18-01 to devpf October 24, 2025 16:48
Restaure le comportement de devpf pour les notifications différées :
- Notifications différées systématiques (sans feature flag)
- Check étendu avec hidden_by_user_at dans DraftNotificationJob

La PR upstream avait réintroduit un ancien code PF avec feature flag,
ce commit aligne sur le comportement actuel de devpf.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@claude
Copy link

claude bot commented Oct 24, 2025

🔍 Revue du code - PR #192

Intégration des releases upstream 2025-02-20-01 à 2025-02-21-03


✅ Points positifs

1. Mise à niveau Ruby 3.4.2

  • Migration de Ruby 3.3.6 → 3.4.2 bien effectuée
  • Ajout de la gem drb pour compatibilité RSpec (temporaire)
  • Pin de concurrent-ruby < 1.3.5 pour éviter le bug Rails

2. Sécurité

  • Mise à jour de Nokogiri 1.18.1 → 1.18.3 (correctif de sécurité)

3. Améliorations fonctionnelles

  • Refonte du système de modifications : forked_with_changes → user_buffer_changes
  • Nouveau système update_timestamps centralisé (performances)
  • Nouveau composant select_procedure_drop_down_list pour instructeurs
  • Amélioration gestion champs RNA avec statut visuel

⚠️ Points d'attention PF

1. Fichiers critiques modifiés

  • app/models/champ.rb : Nouvelle méthode update_timestamps
  • app/models/concerns/dossier_champs_concern.rb : Refonte majeure
  • app/controllers/users/dossiers_controller.rb : 55 additions, 30 deletions

À TESTER : Impact sur champs PF (ReferentielDePolynesie, Visa, TeFeNua, DN, Communes)

2. Suppressions de code

  • app/jobs/cron/datagouv/procedure_deleted_by_month_job.rb (supprimé)
  • app/services/generate_open_data_csv_service.rb (supprimé)

3. CSV référentiels

  • Limite passe de 1000 à 5000 lignes
  • Vérifier impact mémoire serveurs PF

🧪 Tests recommandés

# Champs PF
bundle exec rspec spec/models/champs/ -e "ReferentielDePolynesie|Visa|TeFeNua|DN"

# Auth PF  
bundle exec rspec spec/controllers/omniauth_controller_spec.rb
bundle exec rspec spec/controllers/users/dossiers_controller_spec.rb

# Composants
bundle exec rspec spec/components/editable_champ/

# GraphQL
bundle exec rspec spec/controllers/api/v2/graphql_controller_spec.rb

Tests manuels

  • Workflow dossier avec champs PF
  • Modification en_construction
  • Nouveau select_procedure instructeur
  • Auth Tatou/Microsoft

📋 Checklist avant merge

  • Tests passent : bundle exec rspec
  • Linting OK : bundle exec rails lint
  • Tests manuels champs PF
  • Vérif auth Tatou/Microsoft
  • Tests sur staging
  • Migration t20250221_add_missing_streams_task planifiée

📊 Résumé

Catégorie Statut
Code Quality ✅ Bon
Performance ✅ Amélioré
Sécurité ✅ Bon
Compatibilité PF ⚠️ À tester

Recommandation : ✅ APPROUVER après validation tests PF


Revue générée par Claude Code

maatinito and others added 2 commits October 24, 2025 07:49
Aligne le Dockerfile avec .ruby-version qui utilise Ruby 3.4.2.
Le Dockerfile avait incorrectement régressé à 3.3.2 au lieu de 3.4.2.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
@claude
Copy link

claude bot commented Oct 28, 2025

🔍 Code Review - PR #192: Intégration releases upstream 2025-02-20 à 2025-02-21

✅ Vue d'ensemble

Cette PR intègre 6 releases upstream consécutives (2025-02-20-01 à 2025-02-21-03). L'intégration semble globalement bien réalisée avec une attention particulière portée à la préservation des spécificités PF.


🎯 Points positifs

1. Upgrades de dépendances

  • Ruby 3.3.6 → 3.4.2 : Mise à jour majeure correctement propagée (.ruby-version, Dockerfile, Gemfile.lock)
  • nokogiri 1.18.1 → 1.18.3 : Correction de vulnérabilités de sécurité
  • concurrent-ruby < 1.3.5 : Excellente pratique de versionning avec commentaire explicatif du contournement temporaire pour éviter rails/rails#54264
  • Ajout de drb : Dépendance rspec correctement documentée

2. Refactoring architectural : editing_forkuser_buffer

  • Transition progressive : Les nouvelles méthodes user_buffer_changes? et en_construction_for_editor? maintiennent la rétrocompatibilité
  • Documentation technique : Commentaires # TODO remove when all forks are gone clairement positionnés
  • Cohérence : Tous les composants et controllers mis à jour (autosave_footer_component, edit_footer_component, etc.)

Extrait du code (app/models/concerns/dossier_champs_concern.rb:219-224) :

def user_buffer_changes?
  # TODO remove when all forks are gone
  return true if forked_with_changes?

  champs_on_user_buffer_stream.present?
end

3. Amélioration UX : Champ RNA

  • Nouveau composant de statut : InputStatusMessageComponent affiche maintenant le titre et l'adresse de l'association RNA directement dans le formulaire
  • Meilleure séparation des responsabilités : Suppression de la vue partielle _rna_info au profit d'un affichage inline
  • Localisation i18n : Messages FR/EN correctement implémentés

Fichier : app/components/dsfr/input_status_message_component/input_status_message_component.html.haml:8-9

4. Optimisations de performance

  • Réduction des opérations de base : update_timestamps centralisée dans les controllers de champs
  • Meilleure gestion du streaming : with_update_stream(current_user) appelé avant champ_for_update
  • Moins de touches inutiles : Suppression de touch_champs_changed redondant

Exemple (app/controllers/attachments_controller.rb:26-28) :

if @attachment.present?
  @attachment.purge_later
  champ.update_timestamps  # ← Nouveau : méthode centralisée
end

5. Améliorations fonctionnelles

  • CSV référentiels : limite 1000 → 5000 lignes avec formatage numérique (number_with_delimiter)
  • Gestion d'erreur robuste : Capture de CSV::MalformedCSVError dans import_referentiel
  • Nouveau dropdown de sélection procédure : Composant SelectProcedureDropDownListComponent pour les instructeurs (>3 procédures)
  • Protection contre ProcedurePresentation invalides : Capture PG::UndefinedFunction + destruction automatique + alerte utilisateur

Fichier : app/controllers/instructeurs/procedures_controller.rb:111-122

6. Préservation des spécificités PF

  • 69 fichiers avec tags # pf: : Excellente traçabilité des adaptations Polynésie française
  • Champs PF intacts : VisaChamp, CommuneDePolynesieChamp, ReferentielDePolynesieChamp, etc.
  • Tests PF préservés : Numéros Tahiti (SIRET 9 chars), quotes françaises (''), logo Polynésie

Vérification : app/models/champs/visa_champ.rb - Aucune régression détectée


⚠️ Points d'attention

1. Accessibilité : aria-labelledby ajouté aux dropdowns

Les composants DropDownListComponent et MultipleDropDownListComponent reçoivent maintenant un attribut aria-labelledby.

Impact : Améliore l'accessibilité, mais vérifier que les IDs référencés existent bien dans le DOM.

Fichiers concernés :

  • app/components/editable_champ/drop_down_list_component.rb:43
  • app/components/editable_champ/multiple_drop_down_list_component.rb:21

Recommandation : Tester manuellement avec un lecteur d'écran (NVDA/JAWS) sur quelques procédures critiques.

2. Refactoring annotations dans update_annotations

Le controller InstructeursDossiersController change radicalement sa façon de gérer les annotations :

Avant :

dossier_with_champs.update_champs_attributes(params, :private, updated_by: current_user.email)
dossier.save(context: :champs_private_value)

Après :

public_id, annotation_attributes = filtered_params.to_h.first
annotation = dossier.private_champ_for_update(public_id, updated_by: current_user.email)
annotation.assign_attributes(annotation_attributes)
annotation.save(context: :champs_private_value)

Risque potentiel : Traitement d'une seule annotation à la fois au lieu du batch complet. Si plusieurs annotations sont envoyées, seule la première sera traitée.

Recommandation : Vérifier le comportement avec les formulaires d'annotation multiples (notamment champs répétables privés).

Fichier : app/controllers/instructeurs/dossiers_controller.rb:302-310

3. Suppression de pièces jointes : propagation du timestamp

Nouveau : champ.update_timestamps appelé après @attachment.purge_later.

Impact positif : Cohérence de l'état du dossier.

Point de vigilance : S'assurer que les jobs asynchrones de purge ne causent pas de race conditions avec les timestamps.

Fichier : app/controllers/attachments_controller.rb:26-28

4. Gestion des champs carte (geo_areas)

Les méthodes create, update, destroy dans CarteController appellent maintenant systématiquement @champ.update_timestamps.

Problème mineur : La méthode save_feature retourne maintenant directement geo_area.save sans appeler propagate_touch_champs_changed, qui était supprimé. Mais update_timestamps est appelé avant save_feature, donc si le save échoue, le timestamp sera quand même mis à jour.

Impact : Faux positifs possibles sur "modifications non sauvegardées".

Recommandation : Envisager de déplacer update_timestamps après la validation du save.

Fichier : app/controllers/champs/carte_controller.rb:16-17, 32, 42

5. Migration de la logique RNA

La vue shared/champs/rna/_association est supprimée, mais aucun fichier de migration correspondant dans le diff.

Question : Y a-t-il des vues existantes qui dépendaient de ce partial ? Une recherche rapide s'impose.

Fichier supprimé : app/components/editable_champ/rna_component/rna_component.html.haml:3-4 (lignes supprimées)


🧪 Recommandations de tests

Tests prioritaires à exécuter manuellement

  1. Formulaires avec dropdowns multiples (accessibilité + aria-labelledby)
  2. Annotations privées répétables (vérifier le batch update)
  3. Champs carte avec géométries (timestamps après save failed)
  4. Import CSV référentiels > 1000 lignes (vérifier la limite 5000)
  5. Champ RNA : Remplir un numéro RNA valide et vérifier l'affichage du statut
  6. Sélection rapide de procédure (dropdown instructeur avec >3 procédures)

Tests automatisés

# Tests spécifiques PF
bundle exec rspec spec/models/champs/visa_champ_spec.rb
bundle exec rspec spec/models/champs/commune_de_polynesie_champ_spec.rb
bundle exec rspec spec/controllers/champs/siret_controller_spec.rb

# Tests généraux impactés
bundle exec rspec spec/controllers/instructeurs/dossiers_controller_spec.rb
bundle exec rspec spec/controllers/champs/carte_controller_spec.rb
bundle exec rspec spec/components/dsfr/input_status_message_component_spec.rb

🔒 Sécurité

✅ Aucune vulnérabilité critique détectée

  • Nokogiri mise à jour : Correctif de sécurité appliqué
  • Gestion CSV : Protection contre fichiers mal formés (CSV::MalformedCSVError)
  • ProcedurePresentation : Destruction automatique en cas de requête SQL invalide (protection contre injection SQL indirecte)
  • Autorisations : Pas de changement dans les politiques d'accès

📝 Checklist finale (selon CLAUDE.md)

  • ✅ Tous les tags # pf: préservés (69 fichiers)
  • ✅ Pas de régression des fonctionnalités PF (champs DN, communes, codes postaux, Tatou, Microsoft)
  • ⚠️ À vérifier : Tests manuels sur les 6 points listés ci-dessus
  • En attente : Résultat de la CI (GitHub Actions)
  • ✅ Quotes françaises ('') maintenues dans les tests et messages

🎬 Conclusion

Verdict global : ✅ LGTM avec réserves mineures

Cette PR est bien construite et respecte les conventions du projet. Les changements upstream sont correctement intégrés avec préservation des spécificités PF. Les quelques points d'attention identifiés sont des améliorations potentielles plutôt que des bloqueurs.

Recommandations avant merge :

  1. Valider les 6 tests manuels prioritaires
  2. Attendre la CI verte
  3. Faire un déploiement en staging pour validation métier

Travail de qualité 👍


Review générée avec Claude Code

@maatinito maatinito force-pushed the feature/bump-2025-02-21-03 branch from aa979cb to 859a747 Compare October 28, 2025 20:22
mmagn and others added 4 commits October 28, 2025 11:11
build(:procedure) does not trigger after(:create) callbacks, so
procedure_paths is not created and path returns nil. This causes
route generation errors when trying to access procedure.path.

Upstream fixed this by using create(:procedure) instead.
…vec Ruby 3.4.2

charlock_holmes nécessite les headers de développement de zlib
pour compiler son extension native. Cette dépendance devient
critique avec Ruby 3.4.2.

Résout l'erreur de build Docker :
checking for -lz... no
libz missing
@maatinito maatinito merged commit 502274e into devpf Oct 29, 2025
25 of 38 checks passed
@maatinito maatinito deleted the feature/bump-2025-02-21-03 branch October 29, 2025 01:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

version upgrade montée de version

Projects

None yet

Development

Successfully merging this pull request may close these issues.