{"action":"created","issue":{"url":"https://api.github.com/repos/w3c/activitypub/issues/302","repository_url":"https://api.github.com/repos/w3c/activitypub","labels_url":"https://api.github.com/repos/w3c/activitypub/issues/302/labels{/name}","comments_url":"https://api.github.com/repos/w3c/activitypub/issues/302/comments","events_url":"https://api.github.com/repos/w3c/activitypub/issues/302/events","html_url":"https://github.com/w3c/activitypub/issues/302","id":316484073,"number":302,"title":"Client Create: Order of copying recipients ambiguity","user":{"login":"cjslep","id":2395575,"avatar_url":"https://avatars1.githubusercontent.com/u/2395575?v=4","gravatar_id":"","url":"https://api.github.com/users/cjslep","html_url":"https://github.com/cjslep","followers_url":"https://api.github.com/users/cjslep/followers","following_url":"https://api.github.com/users/cjslep/following{/other_user}","gists_url":"https://api.github.com/users/cjslep/gists{/gist_id}","starred_url":"https://api.github.com/users/cjslep/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cjslep/subscriptions","organizations_url":"https://api.github.com/users/cjslep/orgs","repos_url":"https://api.github.com/users/cjslep/repos","events_url":"https://api.github.com/users/cjslep/events{/privacy}","received_events_url":"https://api.github.com/users/cjslep/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2018-04-21T11:30:06Z","updated_at":"2018-05-05T18:18:08Z","closed_at":null,"author_association":"NONE","body":"Due to the glorious flexibility that is ActivityStreams, an Activity could have multiple `object` properties (since it is [not marked as functional](https://www.w3.org/TR/activitystreams-vocabulary/#properties)).\r\n\r\nThe spec says:\r\n\r\n> A server SHOULD copy any recipients of the Create activity to its object upon initial distribution, and likewise with copying recipients from the object to the wrapping Create activity.\r\n\r\nThis very lightly implies, but really does not specify, the order of this copying. Which is important. If implementors do not pick up on this subtlety, then this results in different behavior when given:\r\n\r\n```\r\n{\r\n  \"type\": \"Create\",\r\n  \"to\": \"example.com/baz\",\r\n  \"object\": [\r\n    {\r\n      \"type\": \"Note\",\r\n      \"to\": \"example.com/foo\",\r\n    },\r\n    {\r\n      \"type\": \"Note\",\r\n      \"to\": \"example.com/bar\",\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\nWhich of the following results is the correct one? If there is no ambiguity resolution here, then within the federation Clients and Servers may not be able to federate correctly.\r\n\r\nA) Activity to objects, then objects to the activity.\r\n\r\n```\r\n{\r\n  \"type\": \"Create\",\r\n  \"to\": [\r\n    \"example.com/baz\",\r\n    \"example.com/foo\",\r\n    \"example.com/bar\"\r\n  ],\r\n  \"object\": [\r\n    {\r\n      \"type\": \"Note\",\r\n      \"to\": [\r\n        \"example.com/foo\",\r\n        \"example.com/baz\",\r\n      ],\r\n    },\r\n    {\r\n      \"type\": \"Note\",\r\n      \"to\": [\r\n        \"example.com/bar\",\r\n        \"example.com/baz\",\r\n      ]\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\nB) Objects to activity, then activity to objects.\r\n\r\n```\r\n{\r\n  \"type\": \"Create\",\r\n  \"to\": [\r\n    \"example.com/baz\",\r\n    \"example.com/foo\",\r\n    \"example.com/bar\"\r\n  ],\r\n  \"object\": [\r\n    {\r\n      \"type\": \"Note\",\r\n      \"to\": [\r\n         \"example.com/baz\",\r\n         \"example.com/foo\",\r\n         \"example.com/bar\"\r\n       ],\r\n    },\r\n    {\r\n      \"type\": \"Note\",\r\n      \"to\": [\r\n         \"example.com/baz\",\r\n         \"example.com/bar\",\r\n         \"example.com/foo\"\r\n      ],\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\nIt seems like A is the logical choice, to me. However, this is then exposed to the issue I outline in #301"},"comment":{"url":"https://api.github.com/repos/w3c/activitypub/issues/comments/386825024","html_url":"https://github.com/w3c/activitypub/issues/302#issuecomment-386825024","issue_url":"https://api.github.com/repos/w3c/activitypub/issues/302","id":386825024,"user":{"login":"nightpool","id":233815,"avatar_url":"https://avatars2.githubusercontent.com/u/233815?v=4","gravatar_id":"","url":"https://api.github.com/users/nightpool","html_url":"https://github.com/nightpool","followers_url":"https://api.github.com/users/nightpool/followers","following_url":"https://api.github.com/users/nightpool/following{/other_user}","gists_url":"https://api.github.com/users/nightpool/gists{/gist_id}","starred_url":"https://api.github.com/users/nightpool/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nightpool/subscriptions","organizations_url":"https://api.github.com/users/nightpool/orgs","repos_url":"https://api.github.com/users/nightpool/repos","events_url":"https://api.github.com/users/nightpool/events{/privacy}","received_events_url":"https://api.github.com/users/nightpool/received_events","type":"User","site_admin":false},"created_at":"2018-05-05T18:18:08Z","updated_at":"2018-05-05T18:18:08Z","author_association":"NONE","body":"Yeah, I can see that being an issue. I don't know what the best solution here is—i think we need more implementation experience with the c2s spec before we're able to resolve this conclusively one way or another."}}
{"actor":{"display_login":"nightpool"}}