T4 W05 SESSION-UNIQ RESIDUAL CLOSED¶
Label: T4 W05 SESSION-UNIQ RESIDUAL CLOSED
When (UTC): 2026-08-11T22:37:52Z
Mode: server development (/home/scola/odoo)
BE tip (unchanged app code this step): 528873e3d31aa5bd1b932bf437b64bea739a7a44
Related BE savepoint fix: 528873e (index create no longer blocks -u)
W05 surface: Core per-lesson only (unchanged)
Problem¶
Residual from W05 rollout: op_session_faculty_start_uniq missing on prod / demo due to historical duplicate (faculty_id, start_datetime) rows.
Other live tenants already had dup_groups=0 and idx=1 after rollout upgrade.
Method (keep MIN(id))¶
Per affected DB, with service stopped briefly:
- Snapshot dup group / extra row counts
- Build loser set = all ids except
MIN(id)per(faculty_id, start_datetime) - Relink/preserve refs before delete:
op_session_res_users_rel→ merge onto keeper, drop loser linksop_attendance_sheet→ relink to keeper; on unique(register_id, session_id, attendance_date)collision: move non-duplicateop_attendance_lineto keeper sheet, drop duplicate lines + colliding lose sheetscola_class_daily_report_activity.session_id→ remapmail_message/mail_followersforop.session→ remap (drop follower dup partners)DELETEloserop_sessionrowsCREATE UNIQUE INDEX IF NOT EXISTS op_session_faculty_start_uniq ...- Restart service + HTTP smoke
Results¶
| Tenant | Conf | DB | before_dup_groups | deleted_rows | after_dup_groups | index_ok | smoke |
|---|---|---|---|---|---|---|---|
| demo | config/odoo-demo.conf |
scoladev_demo |
36 | 281 | 0 | yes | /web/login 200; odoo-demo active |
| prod | config/scola-prod.conf |
scola_goldenbabyntree |
385 | 479 | 0 | yes | /web/login 200; odoo-prod active |
Session totals: demo 1081→800; prod 18253→17774.
Risk notes¶
- Demo had 1 attendance-sheet collision on relink (
keep_id=30,lose_id=31, date 2026-01-15): non-duplicate lines moved to keeper sheet; duplicate student lines on lose sheet discarded; colliding lose sheet removed. - Prod had 0 sheet collisions; 17 loser sessions had sheets (all relinked cleanly).
- Chatter messages on loser sessions remapped to keeper (
mail_message.res_id). - No BE application code change in this closure step (data + index only).
Evidence¶
execution/T4-W05-evidence/T4-W05-session-uniq-demo.txtexecution/T4-W05-evidence/T4-W05-session-uniq-prod.txtexecution/T4-W05-evidence/T4-W05-session-uniq-verify.txt
Parent doc¶
Updates residual section in T4-W05-rollout.md → CLOSED (see companion note below).