An experiment in ATProto records, permalinks, and editing this WhiteWind blog post.

@verdverm.com

Prelude

I've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?

These are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the ATProtocol Developers Discord and on the Lexicon Community GitHub. I recently started a discussion about different ways we might version Lexicon and how we can add editing history to records. Both will have expanded content soon.

Today, I want to do a little experiment on WhiteWind. We were talking in Discord about "permalinks" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?

  • at:// links will get you to the record regardless of handle changes, but they cannot guarantee the content.
  • cid hashes ensure the integrity of the content, but when the record changes, it gets a new cid.

What we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?

I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.

First experiment, publish and edit

Now that it's published the first time, lets look at the links and record

{
  "uri": "at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e",
  "cid": "bafyreifuckizahknew2cu62lztj7uwaiksw6bnrev63djoedsgwwwlrlry",
  "value": {
    "$type": "com.whtwnd.blog.entry",
    "theme": "github-light",
    "title": "An experiment at ATProto records, editing, and permalinks.",
    "content": "### Prelude\n\nI've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?\n\nThese are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the [ATProtocol Developers Discord](https://discord.gg/qrD4jmGA) and on the [Lexicon Community GitHub](https://github.com/orgs/lexicon-community/discussions). I recently started a [discussion about different ways we might version Lexicon](https://github.com/orgs/lexicon-community/discussions/30) and how we can [add editing history to records](https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol). Both will have expanded content soon.\n\nToday, I want to do a little experiment on WhiteWind. We were talking in Discord about \"permalinks\" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?\n\n- `at://` links will get you to the record regardless of handle changes, but they cannot guarantee the content. \n- `cid` hashes ensure the integrity of the content, but when the record changes, it gets a new cid.\n\nWhat we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?\n\n> I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.\n\nNow that it's published the first time, lets look at the links and record\n\n- WhiteWind _permalink_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e)\n- WhiteWind _permalink (strict)_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe)\n\n- ATProto _at-uri_ [at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e]()",
    "createdAt": "2025-02-18T05:08:59.900Z",
    "visibility": "author"
  }
}

I think WhiteWind is live updating a published post

I just noticed that the bullet points I wrote after the first publish are in the record content when I looked it up in blebbit's @xplorer. Refreshing the WhiteWind UI showed new content that I have not pushed the publish button on. I bet this is some autosave thing overwriting the record. I'm going to save it again right now.

Ok, back now and have some stuff to show you

  • new cid, this is expected and by the spec
  • createdAt has updated, this surprised me, I would use an updatedAt field, maybe a publishedAt too.
{
  "uri": "at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e",
  "cid": "bafyreigl4iiku2dsoljpi725dihukapmtoexuvwqbltilxfmjm6jbzjdam",
  "value": {
    "$type": "com.whtwnd.blog.entry",
    "theme": "github-light",
    "title": "An experiment at ATProto records, editing, and permalinks.",
    "content": "### Prelude\n\nI've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?\n\nThese are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the [ATProtocol Developers Discord](https://discord.gg/qrD4jmGA) and on the [Lexicon Community GitHub](https://github.com/orgs/lexicon-community/discussions). I recently started a [discussion about different ways we might version Lexicon](https://github.com/orgs/lexicon-community/discussions/30) and how we can [add editing history to records](https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol). Both will have expanded content soon.\n\nToday, I want to do a little experiment on WhiteWind. We were talking in Discord about \"permalinks\" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?\n\n- `at://` links will get you to the record regardless of handle changes, but they cannot guarantee the content. \n- `cid` hashes ensure the integrity of the content, but when the record changes, it gets a new cid.\n\nWhat we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?\n\n> I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.\n\nNow that it's published the first time, lets look at the links and record\n\n- WhiteWind _permalink_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e)\n- WhiteWind _permalink (strict)_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe)\n\n- ATProto _at-uri_ [at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e](https://blebbit.app/at/verdverm.com/com.whtwnd.blog.entry/3lighej3cvc2e)\n\n```json\n{\n  \"uri\": \"at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e\",\n  \"cid\": \"bafyreifuckizahknew2cu62lztj7uwaiksw6bnrev63djoedsgwwwlrlry\",\n  \"value\": {\n    \"$type\": \"com.whtwnd.blog.entry\",\n    \"theme\": \"github-light\",\n    \"title\": \"An experiment at ATProto records, editing, and permalinks.\",\n    \"content\": \"### Prelude\\n\\nI've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?\\n\\nThese are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the [ATProtocol Developers Discord](https://discord.gg/qrD4jmGA) and on the [Lexicon Community GitHub](https://github.com/orgs/lexicon-community/discussions). I recently started a [discussion about different ways we might version Lexicon](https://github.com/orgs/lexicon-community/discussions/30) and how we can [add editing history to records](https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol). Both will have expanded content soon.\\n\\nToday, I want to do a little experiment on WhiteWind. We were talking in Discord about \\\"permalinks\\\" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?\\n\\n- `at://` links will get you to the record regardless of handle changes, but they cannot guarantee the content. \\n- `cid` hashes ensure the integrity of the content, but when the record changes, it gets a new cid.\\n\\nWhat we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?\\n\\n> I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.\\n\\nNow that it's published the first time, lets look at the links and record\\n\\n- WhiteWind _permalink_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e)\\n- WhiteWind _permalink (strict)_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe)\\n\\n- ATProto _at-uri_ [at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e]()\",\n    \"createdAt\": \"2025-02-18T05:08:59.900Z\",\n    \"visibility\": \"author\"\n  }\n}\n```\n\n> I think WhiteWind is live updating a published post. I just noticed that the bullet points I wrote after the first publish are in the record content when I looked it up in blebbit's @xplorer. Refreshing the WhiteWind UI showed new content that I have not pushed the publish button on. I'm going to push it agin right now.",
    "createdAt": "2025-02-18T05:14:34.986Z",
    "visibility": "author"
  }
}

And it just updated again!

{
  "uri": "at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e",
  "cid": "bafyreiepugqb5u5pq2aq6onctogjdjzrfyn3xcgrq7fnd6lszwlhirmwqm",
  "value": {
    "$type": "com.whtwnd.blog.entry",
    "theme": "github-light",
    "title": "An experiment at ATProto records, editing, and permalinks.",
    "content": "### Prelude\n\nI've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?\n\nThese are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the [ATProtocol Developers Discord](https://discord.gg/qrD4jmGA) and on the [Lexicon Community GitHub](https://github.com/orgs/lexicon-community/discussions). I recently started a [discussion about different ways we might version Lexicon](https://github.com/orgs/lexicon-community/discussions/30) and how we can [add editing history to records](https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol). Both will have expanded content soon.\n\nToday, I want to do a little experiment on WhiteWind. We were talking in Discord about \"permalinks\" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?\n\n- `at://` links will get you to the record regardless of handle changes, but they cannot guarantee the content. \n- `cid` hashes ensure the integrity of the content, but when the record changes, it gets a new cid.\n\nWhat we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?\n\n> I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.\n\nNow that it's published the first time, lets look at the links and record\n\n- WhiteWind _permalink_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e)\n- WhiteWind _permalink (strict)_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe)\n\n- ATProto _at-uri_ [at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e](https://blebbit.app/at/verdverm.com/com.whtwnd.blog.entry/3lighej3cvc2e)\n\n```json\n{\n  \"uri\": \"at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e\",\n  \"cid\": \"bafyreifuckizahknew2cu62lztj7uwaiksw6bnrev63djoedsgwwwlrlry\",\n  \"value\": {\n    \"$type\": \"com.whtwnd.blog.entry\",\n    \"theme\": \"github-light\",\n    \"title\": \"An experiment at ATProto records, editing, and permalinks.\",\n    \"content\": \"### Prelude\\n\\nI've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?\\n\\nThese are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the [ATProtocol Developers Discord](https://discord.gg/qrD4jmGA) and on the [Lexicon Community GitHub](https://github.com/orgs/lexicon-community/discussions). I recently started a [discussion about different ways we might version Lexicon](https://github.com/orgs/lexicon-community/discussions/30) and how we can [add editing history to records](https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol). Both will have expanded content soon.\\n\\nToday, I want to do a little experiment on WhiteWind. We were talking in Discord about \\\"permalinks\\\" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?\\n\\n- `at://` links will get you to the record regardless of handle changes, but they cannot guarantee the content. \\n- `cid` hashes ensure the integrity of the content, but when the record changes, it gets a new cid.\\n\\nWhat we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?\\n\\n> I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.\\n\\nNow that it's published the first time, lets look at the links and record\\n\\n- WhiteWind _permalink_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e)\\n- WhiteWind _permalink (strict)_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe)\\n\\n- ATProto _at-uri_ [at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e]()\",\n    \"createdAt\": \"2025-02-18T05:08:59.900Z\",\n    \"visibility\": \"author\"\n  }\n}\n```\n\n> I think WhiteWind is live updating a published post. I just noticed that the bullet points I wrote after the first publish are in the record content when I looked it up in blebbit's @xplorer. Refreshing the WhiteWind UI showed new content that I have not pushed the publish button on. I'm going to push it agin right now.\n\nOk, back now and have some new stuff to show.\n\n- new `cid`\n- `createdAt` has updated\n\n```json\n{\n  \"uri\": \"at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e\",\n  \"cid\": \"bafyreigl4iiku2dsoljpi725dihukapmtoexuvwqbltilxfmjm6jbzjdam\",\n  \"value\": {\n    \"$type\": \"com.whtwnd.blog.entry\",\n    \"theme\": \"github-light\",\n    \"title\": \"An experiment at ATProto records, editing, and permalinks.\",\n    \"content\": \"### Prelude\\n\\nI've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?\\n\\nThese are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the [ATProtocol Developers Discord](https://discord.gg/qrD4jmGA) and on the [Lexicon Community GitHub](https://github.com/orgs/lexicon-community/discussions). I recently started a [discussion about different ways we might version Lexicon](https://github.com/orgs/lexicon-community/discussions/30) and how we can [add editing history to records](https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol). Both will have expanded content soon.\\n\\nToday, I want to do a little experiment on WhiteWind. We were talking in Discord about \\\"permalinks\\\" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?\\n\\n- `at://` links will get you to the record regardless of handle changes, but they cannot guarantee the content. \\n- `cid` hashes ensure the integrity of the content, but when the record changes, it gets a new cid.\\n\\nWhat we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?\\n\\n> I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.\\n\\nNow that it's published the first time, lets look at the links and record\\n\\n- WhiteWind _permalink_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e)\\n- WhiteWind _permalink (strict)_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe)\\n\\n- ATProto _at-uri_ [at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e](https://blebbit.app/at/verdverm.com/com.whtwnd.blog.entry/3lighej3cvc2e)\\n\\n```json\\n{\\n  \\\"uri\\\": \\\"at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e\\\",\\n  \\\"cid\\\": \\\"bafyreifuckizahknew2cu62lztj7uwaiksw6bnrev63djoedsgwwwlrlry\\\",\\n  \\\"value\\\": {\\n    \\\"$type\\\": \\\"com.whtwnd.blog.entry\\\",\\n    \\\"theme\\\": \\\"github-light\\\",\\n    \\\"title\\\": \\\"An experiment at ATProto records, editing, and permalinks.\\\",\\n    \\\"content\\\": \\\"### Prelude\\\\n\\\\nI've recently become quite interested in ATProto, with good reason I suspect you will agree. One of the interesting aspects are Lexicon, the schema of ATProto, and the records in your PDS, which are put into collections of Lexicon, like posts, likes, and follows. The ATProto spec also allows editing both Lexicon and records (even though Bluesky has not turned this on in their app). So what happens when we edit these things? How can we manage the complexity of evolving schema and records which can change content? What are the social expectations, desires, and consequence of the choices we make?\\\\n\\\\nThese are some of the questions I have been pondering lately. I'm not alone in this, you can find these discussions happening in the [ATProtocol Developers Discord](https://discord.gg/qrD4jmGA) and on the [Lexicon Community GitHub](https://github.com/orgs/lexicon-community/discussions). I recently started a [discussion about different ways we might version Lexicon](https://github.com/orgs/lexicon-community/discussions/30) and how we can [add editing history to records](https://verdverm.com/blog/adding-record-editing-with-history-to-atprotocol). Both will have expanded content soon.\\\\n\\\\nToday, I want to do a little experiment on WhiteWind. We were talking in Discord about \\\\\\\"permalinks\\\\\\\" and what they mean on ATProto. Premalinks are supposed to be permanent links to some piece of content so you can always find it again. However, in ATProto, record content is overwritten, so is a link really permanent?\\\\n\\\\n- `at://` links will get you to the record regardless of handle changes, but they cannot guarantee the content. \\\\n- `cid` hashes ensure the integrity of the content, but when the record changes, it gets a new cid.\\\\n\\\\nWhat we have is a semi-permalink. So I became curious when I heard that WhiteWind has two kinds of permalinks, a regular one and a strict one that includes the cid. The question and experiment for today is what happens to these permalinks when I edit an already publish post?\\\\n\\\\n> I'm going to stop now, publish the post, and come back to write more, so we can look at the records as we go through.\\\\n\\\\nNow that it's published the first time, lets look at the links and record\\\\n\\\\n- WhiteWind _permalink_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e)\\\\n- WhiteWind _permalink (strict)_ [https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe](https://whtwnd.com/did:plc:2jtyqespp2zfodukwvktqwe6/3lighej3cvc2e/bafyreifd2yol5cgzox74vyxzu4fnjprz6xzzscrltnlgcs3a5jcq275eoe)\\\\n\\\\n- ATProto _at-uri_ [at://did:plc:2jtyqespp2zfodukwvktqwe6/com.whtwnd.blog.entry/3lighej3cvc2e]()\\\",\\n    \\\"createdAt\\\": \\\"2025-02-18T05:08:59.900Z\\\",\\n    \\\"visibility\\\": \\\"author\\\"\\n  }\\n}\\n```\\n\\n> I think WhiteWind is live updating a published post. I just noticed that the bullet points I wrote after the first publish are in the record content when I looked it up in blebbit's @xplorer. Refreshing the WhiteWind UI showed new content that I have not pushed the publish button on. I'm going to push it agin right now.\",\n    \"createdAt\": \"2025-02-18T05:14:34.986Z\",\n    \"visibility\": \"author\"\n  }\n}\n```\n\nAnd it just updated again",
    "createdAt": "2025-02-18T05:19:31.293Z",
    "visibility": "author"
  }
}

Ok, not copying over records anymore, they are getting a little nested and meta :]

We can be sure the record is updating without me pushing any buttons. Here are some pictures

image image image

So where did we end up

Latest permalinks from WhiteWind

The first link will get you to the latest version of the post. The server is not happy if we try an old strict permalink...

image

Certainly, by now, all of those strict permalinks are broken and hopefully showing up in some monitoring.

Remarks

Well, we can see permalinks are not so permanent. This is the current design of ATProto. We can use the cid to inform the user that the content is different from the link. This is what is called a strongRef in the spec, the combination of an at:// uri and a cid hash. If you want better permalinks with editing, you have to do copy-on-write when you modify the record. Then add appropriate linking to form the edit history on top, and then provide permalinks, or ref and strongRef in ATProto speek. This also points at the wide variety of behavior and proceedures we should expect to see on ATProto as developers experiement and build on new capabilities. It will be a lot like open source, but with shared schemas and databases. It's certainly an exciting time to be building on ATProto.

tl;dr WhiteWind live updates published posts with autosave, so you may want to be semi-permanently done with your post or your links will be semi-permantly gone :]

If you've read this far, check out what I'm working on.

@blebbit.app

Blebbit is an ATProto app for communties to organize and communicate. It brings all of the great user choice, stacked moderation, and single account from ATProto, together with the various ways communities create and share content and experiences in Discord, Reddit, and Facebook Groups.

We just launched public and private chats. Public chats are like the days of old AIM chats where you went into public rooms. Blebbit lets you chat about any hashtag with everyone on ATProto, while respecting your moderation and algorithm choices. You can also create private chats using magic links (we'll be adding stricter permissions soon). Chat history is not published to your ATProto database, (1) to keep them private and (2) because it will probably end up being to big and cause a DDoS. To this end, we think about @blebbit as a hybrid ATProto app, part on-protocol and in-network, and part private to support the expectations our users have for private groups and messaging.


not so keen on the Xchan logo just below being along side my content...

verdverm.com
verdverm

@verdverm.com

dev & entrepreneur interested in atproto, cuelang, machine learning, developer experience, combating misinformation

working on https://blebbit.app | @blebbit.app | #blebbit

personal: https://verdverm.com | https://github.com/verdverm

Post reaction in Bluesky

*To be shown as a reaction, include article link in the post or add link card

Reactions from everyone (0)