{"id":28396196,"url":"https://github.com/ssbc/sameas-spec","last_synced_at":"2026-01-27T13:32:58.995Z","repository":{"id":148991656,"uuid":"262887890","full_name":"ssbc/sameas-spec","owner":"ssbc","description":null,"archived":false,"fork":false,"pushed_at":"2020-11-25T07:40:00.000Z","size":6,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-10-14T12:24:15.453Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ssbc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-05-10T22:36:01.000Z","updated_at":"2020-11-25T15:04:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"44f1d7e6-2b12-4ff8-9e7d-a4ab2f38da01","html_url":"https://github.com/ssbc/sameas-spec","commit_stats":{"total_commits":3,"total_committers":1,"mean_commits":3.0,"dds":0.0,"last_synced_commit":"c76e7e371fbbcbc3017a172aa5da4f0644a48efd"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ssbc/sameas-spec","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssbc%2Fsameas-spec","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssbc%2Fsameas-spec/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssbc%2Fsameas-spec/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssbc%2Fsameas-spec/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ssbc","download_url":"https://codeload.github.com/ssbc/sameas-spec/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssbc%2Fsameas-spec/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28813539,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-31T21:37:17.750Z","updated_at":"2026-01-27T13:32:58.989Z","avatar_url":"https://github.com/ssbc.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# sameAs spec | DRAFT\n\n:warning: working document, currently only for collecting ideas\n\nThe purpose of this document is to describe \"sameAs\", and detail some of the reuirements \nand expectation for how it will behave.\n\nThis will form a foundation for spec'ing possible implementations.\n\n## The problem\n\nIn scuttlebutt, feeds are bound to individual devices - this is a requirement for easy replication, and outside the scope of this document.\nA common problem is someone using a laptop + desktop or phone, and expecting to be able to have a unified identity with which to interact with\nthe network with.\n\nCurrent clients don't have the means to support this well, and we see workaround like\n- having multiple variations of your name to distinguish devices (e.g. @soapy, @soapy-laptop, @soapy-mac, @soapy-win)\n- people @mentioning all the different devices an identity could be using (see e.g. above)\n    - this is to make sure notifications land\n    - in private messages this gets hard because there's a cap of 7 recps\n- visiting multiple different profiles to see what a friend has been up to\n\n\n## Requirement for a solution\n\nKeep in mind the following are to help us focus _outward_ on the impact of whatever we design.\nLet's come back to these when we're discussing possible implementations.\n\n1. Allow a great onboarding experience\n    - @soapy can merge all his accounts from any device\n\n2. Protect against unwanted merging\n    - might require consent from devices being \"added\"\n\n3. Allow unmerging of sameAs\n    - any @soapy device can nullify the sameAs (no one-ring to rull them all)\n    - TODO : does that device just exit, or is the whole thing void?\n\n4. Notifications\n    - anyone should be able to mention \"@soapy\" easily\n    - \"@soapy\" should be able to check their notifications\n\n5. Private messages\n    - private messages should be accessible from any part of the identity\n    - one identifier per \"identity\" so we don't blow the recps cap\n\n6. Can be implemented in multiple languages\n    - relatively easy to understand\n    - small dependency stack\n\n\n## History / Possible solutions\n\nlink out to draft solutions / summaries of experiments\n\n- Matt's work\n- Christians work\n- Mix's work\n\n## Questions\n\n**A. Unique id**\n- mix: I think we should have a unique ID for a identity. What should it be though?\n    1. any one of the feedIds in in the identity? (then lookup the sameAs and infer the others)\n        - problem: what happens when the sameAs changes over time? e.g. a cypherlink says @mix, but then one device peels out from that ... when you click the link later what do you get?\n        - problem: what do you do with recps then, use all the feedIds (NO)\n    2. a concat of all the feedIds currently in sameAs\n        - it's explicit!\n        - problem: what to do with recps?\n    3. a unique id associated with the sameAs / identity record which binds the identities\n        - can use the history of edits on this record to answer questions about \"who was in the identity when\"\n        - can attach a public key to this identity for DMs\n            - should not use that for id, as might want to cycle it\n        - problem: how to use this id as an 'author' in ssb-crut-authors ?\n            - identity needs a concept of sequence, and a multi-feed identity has no absolute order..\n        - Could address requirements (2) (3) using ssb-crut-authors\n            - adding another feed as an author to an identity records is inviting them\n            - they can then edit a consent field (and we consider only edits from a feed adding itself to that field as valid)\n            - any identity could remove the authorship of another one to kick it (so sameAs = author + consent)\n\n**B. Tangle?**\n- mix: Do we tangle together the messages published by the feeds in an identity?\n    - i.e. each message has `content.tangles.identity = { root, previous }`\n    - this would allow quick lookup of messages by a particular \"identity\" (requirement 4)\n    - would offer some _partial_ ordering, which might be needed for permissoins on e.g. record authorship (though is this enough?)\n\n**C. Signing**\n- mix: if we have a unique identity record which we can attach DM + signing keys to, then all messages could be signed by the identity\n    - might not be necessary\n\n    \n\n## Resources\n\n- Handling cypherlinks to merged records (2020-11-25) : %e5bZQU0eGr77bAm8DGJ5hgSwT7EliiA56yenIYEWxMw=.sha256\n- Multi-feed identities (2020-11-25) : %YaWEWHDWAY6p/g9zIwCJovsd1SUyHpwuGGz3Ug/jtW8=.sha256\n- Multi-device feeds - grant postmortem (2018-02-18) : %/RccaHIeyhWdoP18bhy+1IhSqnd0hGHCNmtMr14Ccbw=.sha256\n- Research multi-device feeds (2017-10-26) : %JjSO5d5/lIRyv5gUKEFis57urBvFam1cAbAIVXMMGJo=.sha256\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssbc%2Fsameas-spec","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fssbc%2Fsameas-spec","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssbc%2Fsameas-spec/lists"}