Skip to content

Update upstream master (2026-09-22): !36-!45 wave — reps pipeline, votes, plugin-gated migrations

Scaffold Digital Fleet requested to merge chore/update-upstream-2026-09-22 into master

Supersedes !1 (closed) (its content is fully included). Brings upstream master (028ab66a + !45 fixes cherry-picked) into palestine/risefor-lobbying:

  • !36-!41: import hardening, exclude-party/representatives, scrutins models + votes, perf fixes
  • !42-!44: reps data pipeline (AN downloads, senat.fr harvest, photos), fresh-by-default + multi-row ADD semantics
  • !45: s.law runtime gate in vote-history + plugin-gated 0276 + 0269 placeHemicycle dedup

Fork-specific migration graph fixes (fresh clones of the fork failed before AND after the upstream merge):

  • 0277_post_update_merges: no-op node joining the 5 leaves (fork drift 0235/0250/0260 + 0269_import_fields + 0276)
  • redundant upstream 0277_post_master_merges removed (same join, superset stays)
  • 0240: pinned 0233_auto chain as dependency — Django's plan could reach 0240 via 0250_merge before the orphan chain that re-adds representativeFunction.name_en (FieldDoesNotExist on fresh clones)

Tested (isolated /tmp env, flag OFF = palestine's prod config): fresh migrate exit 0 (was broken pre-merge AND pre-existing before this wave); schema asserted: no targetLaw/titleRelatedLaw/scrutin.law, placeHemicycle+birthDate present; pages 200; flag-ON fresh cell also green (guard vs accidental flip). Existing instance DB unaffected (all these migrations already applied; Django tracks by name).

Conflict resolution: import_elected_gouv.py → upstream version (eb1c4a65 supersedes the fork's broken 7cebe66f --exclude-party).

Merge request reports