feat(event)!: open the calendar, keep editing with its owners #205
No reviewers
Labels
No labels
adr
android
area/calendar
area/design-system
area/i18n
area/jobs
area/offline
area/server
area/testing
bug
ci
duplicate
enhancement
help wanted
invalid
notifications
question
reliability
security
severity/low
severity/medium
tracking
web
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
eagraiclainne/app!205
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/household-visible-calendar"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #188. Implements the decision in #187, and closes the escalation
that decision opened.
The disagreement.
ListOccurrenceshas always returned every event inthe window to any authenticated caller, guests included, while
Readrefused anyone off the member list. The grid drew your partner's dentist
appointment and then denied the tap that opened it.
AddUserrequiredmembership too, so nobody but an admin could put themselves on the school
run they could plainly see.
The opening. Everyone reads the whole calendar. Everyone the matrix
admits — all but guests — may join any event on it.
Readdrops itsmembership guard, and
AddUsertakes a newsvc.RequireEventJoinerseamthat passes a self-add.
What opening it broke, and how this closes it. Every edit guard asked
whether a caller appeared on
Event.users. That was a fair proxy whileonly a member could get on the list, and meaningless the moment anyone
could add themselves — joining an event would have carried the right to
rewrite or delete it.
So attendance and authority are now separate. A self-add records
RELATION_TYPE_ATTENDEE, a new enum value with nothing renamed orrenumbered (ADR-0035); adding someone else still records an owner.
Presence still answers who is going, who hears a reminder and what
ListEventsreturns. Authority asksIsEventOwner.RequireEventLeavermirrors the joiner so nobody is trapped on an eventthey joined, and
Update's guest-list rewrite now keeps each person'sexisting relation — without that, the next save of any edit would have
promoted every attendee back to owner and eroded the split within a day.
RequireEventMemberis deleted rather than left unused: a presence-basedguard in the authz package is a trap now that presence is self-service.
Nobody currently on an event changes. Every stored row was written
through
OwnerRef, and an integration spec writes a row straight into thetable as protojson, bypassing the handlers, to prove its owner keeps every
power.
ADR-0036 records the reasoning; ADR-0009 point 2 is amended in place.
Still outstanding, and recorded in the ADR: the web and Android clients
gate editing on the role matrix alone, with no membership term at all, so
they over-show controls to a non-member today and will do the same for an
attendee. That is #193's work.
🤖 Generated with Claude Code
Test report
Coverage: 26.9%
Updated by the check workflow · commit
75fdb5dc9fAndroid test report
Coverage: 3.0% of lines
Updated by the android workflow · commit
75fdb5dc9f86cbe6705175fdb5dc9f