Skip to content

Either person can schedule an Item; only its author can reword it

Superseded by ADR-0006. The Circle now owns its Items and every Member may reword and delete any of them; created_by is provenance only. Kept because the reasoning below — and its admission that the rule began as an accident — is the clearest evidence for why it was replaced.

Ownership on an Item is deliberately asymmetric. update_item and delete_item raise PermissionDenied unless the actor created the Item; schedule_item and mark_item_done accept either person.

The app is shared by two people who are planning together. Putting Friday at 7pm on your partner's restaurant idea is the app working as intended; rewriting their note about it is not. Ownership therefore protects an Item's words, not its progress through Open → Scheduled → Done.

Consequences

  • mark_item_done takes an actor it never reads. That is intentional: every operation is attributable, and the parameter is where a future rule or notification would hook in. It is not an oversight to be tidied away.
  • Before this was written down, the rule existed only by accident — two of the four mutating views checked ownership and two didn't. Anyone auditing those views would have read it as a bug. It wasn't.
  • item_delete still narrows its queryset with created_by=request.user, so over HTTP a non-creator gets a 404 before delete_item can raise 403. The rule lives in the module regardless, for callers that aren't views.