When an agent created a sub-issue while working on a human's behalf, that human
received no notifications for it at all. issue_subscriber modelled ACTOR
identity, so an agent-created, agent-assigned issue had a full subscriber list
and zero members to deliver to. The platform already knew who the work was for
(agent_task_queue.originator_user_id, MUL-4302); notification never asked.
- attribution.DelegatedSubscriber: one shared rule over the same origin
waterfall ClassifyDirect uses. agent_create subscribes the originator as
'delegated'; quick_create keeps the direct 'creator' tier; autopilot and
degraded attribution subscribe nobody.
- Delegated is a reduced delivery tier: in_review/done/cancelled/blocked plus
failures and mentions. Routine churn is suppressed, and the parent bubble
cannot re-deliver what the tier dropped.
- Unsubscribe becomes stateful: an unsubscribed_at tombstone survives later
rule passes, and opt_out_scope distinguishes "this issue" from "this subtree"
so a narrow opt-out no longer silently suppresses future children.
- Subtree unsubscribe is its own endpoint. A body flag cannot fail loudly
against an older backend (Go drops unknown fields); an unknown route 404s,
which the UI now surfaces with a distinct message.
- Eligibility and the write share one statement under a (workspace, user)
advisory lock that subtree unsubscribe and member revoke also take, closing
the check-then-insert races. Revoke additionally clears the departing
member's subscriptions in the same tx.
- UI explains a delegated subscription and offers both unsubscribe scopes.
Migrations 249/250 add the delegated reason, the opt-out tombstone, and the
opt-out scope, using NOT VALID + VALIDATE CONSTRAINT so the widened CHECK does
not scan issue_subscriber under an exclusive lock.
Reviewed across eight rounds; an earlier write-time subtree roll-up was built
and then removed in full once it proved unfixable without serializing every
topology mutation. The parent's own status transition already carries that
signal.
Closes MUL-5483.