You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Membership owner #605 rejects two (member, group, role) assignments whose validity intervals are not strictly Before/After, independent of their weights. Persistence 0010 originally enforced only the same-member/same-role aggregate share budget, so two overlapping rows for the same observed unit, same target group, and same role could persist when their weights summed to at most one. That state is not reconstructable by the Membership owner: it is a duplicate temporal edge, not legitimate multiple membership.
RED → causal repair
RED 5923151335d440b33df3aab17961451e51c53124 proves same observed unit + same target entity + same role + possible temporal overlap must fail even at 0.5 + 0.5, while strict leave/re-entry, different targets, and different roles remain valid;
rollback 81b400b5bb8a869b9622509f90b35f26b85af7e6 removes the new helper; fixture doctoring f2de8acfe9e52ade01b5183c51407f388400b88e preserves a nonempty open-ended leave/re-entry uncertainty window;
target-only UPDATE acceptance 1c2328259cfb8f507b9b7809ebe565dde809a412 proves changing only target_entity_id cannot create a duplicate edge and that a rejected update leaves the original target unchanged;
Different targets with one role remain legitimate multiple membership subject to the exact pointwise #610/#612 share budget. Different roles remain independent. No row merge, target invention, weight normalization, or entity/project identity collapse is used.
Current authority
The surviving vehicle is Draft #615 exact 10b07fcdf47f867e3c7b78ba1b8e8a2a668cc4b3. #621 remains open until current-head PostgreSQL 18 acceptance, coverage/security, qualifying review, prerequisite reconciliation, and normal landing are complete.
Activity
test(persistence): expose duplicate membership temporal edges (#621)
fix(persistence): preserve duplicate membership edge invariant (#621)
fix(persistence): rollback duplicate-edge helper (#621)
test(persistence): keep duplicate re-entry fixture nonempty (#621)
test(persistence): verify protected retryable membership cutover (#619 …
test(persistence): cover target-only duplicate update admission (#621)