# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 60438
# self = https://watcher.sour.is?uri=https://twtxt.net/user/prologic/twtxt.txt&offset=57491
# next = https://watcher.sour.is?uri=https://twtxt.net/user/prologic/twtxt.txt&offset=57591
# prev = https://watcher.sour.is?uri=https://twtxt.net/user/prologic/twtxt.txt&offset=57391
There we go!

=> twtxt.dev

🥳=
@doesnm I will have something up soon™ 🤞
@doesnm I will have something up soon™ 🤞
@doesnm twt probably isn't the best client I'm afraid. It doesn't really cache twts by their key (hash) to display threads properly. Jenny however does 👌
@doesnm twt probably isn't the best client I'm afraid. It doesn't really cache twts by their key (hash) to display threads properly. Jenny however does 👌
Here's what I've got so far...
Here's what I've got so far...
@doesnm Thanks! I've almost come up with my own theme already 🤣 I _actually_ don't really want to use Hugo at all, I find it too complicated. But it is pretty popular so I _thought_ maybe I'd rip-off a nice theme... Hmmm 🧐

Anyway, What I really normally use for a lot of my static sites is zs
@doesnm Thanks! I've almost come up with my own theme already 🤣 I _actually_ don't really want to use Hugo at all, I find it too complicated. But it is pretty popular so I _thought_ maybe I'd rip-off a nice theme... Hmmm 🧐

Anyway, What I really normally use for a lot of my static sites is zs
I'm looking to develop a static site for twtxt.dev -- A domain I own and have wanted to use for developer and specification docs for Twtxt.

Can anyone recommend a few Hugo themes you like?

All of the dev.twtxt.net content would move over as well.
I'm looking to develop a static site for twtxt.dev -- A domain I own and have wanted to use for developer and specification docs for Twtxt.

Can anyone recommend a few Hugo themes you like?

All of the dev.twtxt.net content would move over as well.
Cya y'all again next month (2nd Sat in Oct) 🤞
Cya y'all again next month (2nd Sat in Oct) 🤞
👋 Thanks for joining us on our Sept monthly Yarn.social meetup today y'all 🙇‍♂️ We had @david @sorenpeter @doesnm @falsifian and @xuu 💪 Nice turn out! (_not all at once of course, as we normally run this over 4 hours as we span many time zones!_)

Things we talked about:

- Decentralised vs. Distributed
- Use of SHA256 for Twt Hash(es)
- We solved Edits! 🥳
- UUID(s) probably won't work! (_susceptible to sppofing_)
- Helped @sorenpeter write some PHP to process/parse User-Agent and service his feed via a custom PHP script 😅
- @falsifian introduced himself 👌
- Talked about Merkle Trees 🌳

Did I miss anything? 🤔
👋 Thanks for joining us on our Sept monthly Yarn.social meetup today y'all 🙇‍♂️ We had @david @sorenpeter @doesnm @falsifian and @xuu 💪 Nice turn out! (_not all at once of course, as we normally run this over 4 hours as we span many time zones!_)

Things we talked about:

- Decentralised vs. Distributed
- Use of SHA256 for Twt Hash(es)
- We solved Edits! 🥳
- UUID(s) probably won't work! (_susceptible to sppofing_)
- Helped @sorenpeter write some PHP to process/parse User-Agent and service his feed via a custom PHP script 😅
- @falsifian introduced himself 👌
- Talked about Merkle Trees 🌳

Did I miss anything? 🤔
And here's a dashy of the no. of notify requests (from WebSub)
And here's a dashy of the no. of notify requests (from WebSub)
yarnd and WebSub
yarnd and WebSub
@bender The display is very very good 😊
@bender The display is very very good 😊
@sorenpeter well edits can be detected with either approach really
@sorenpeter well edits can be detected with either approach really
Summary of Discussions (_as best I can_):

- @lyse and @sorenpeter express simplicity. Both Lyse and Sorenpeter support location-based addressing.
- @falsifian believes we should continue to develop ideas and extensions progressively over time like we've always done.
- @david @quark and @bender would like a better user experience, especially when threads break due to edits, deletions or feed location changes.
- @anth would like to see utf-8 mandated, and the threading model remain largely the same as it is today, which is primarily based on the convention of a Twt Subject anyway, Twt Hash(es) just make the threading "more precise". Anth also states that format, client and server specification/recommendations should be kept separate.
- @movq @xuu sorry you two haven't said too much really, so I'm not too sure?

Overall, the 22 votes we've had on the poll from the community (_if you can call it a community?_) have clearly shown that:

- We continue to support content-based addressing. (65/35)
- We think about formally supporting edits/deletes (60/40)
- We do not increase the use of cryptography (_thworing things like authenticity and identity out the window_) (70/30)

And overall the NPS (_net promoter score_) of "Would I recommend Twtxt to a friend" is a whopping 7/10 (_which is crazy! 🤯_)

Let's have our monthly catch up soon™ (1hr) and discuss together. My own take on the direction we should take at this point is as follows:

- We continue to use hashing for the threading model.
- We think about changing this to SHA-256 for simplicity.
- We either adopt @anth's UUID approach or @lyse Dynamic URL approach.
- We continue to incrementally/progressively improve things over time as @falsifian suggested.
- We think about mandating utf-8 as @anth suggests which makes things so much easier for everyone.
- We further discuss the merits/ideas of supporting formal Edit/Delete requests or other ways to better support this in some way.
Summary of Discussions (_as best I can_):

- @lyse and @sorenpeter express simplicity. Both Lyse and Sorenpeter support location-based addressing.
- @falsifian believes we should continue to develop ideas and extensions progressively over time like we've always done.
- @david @quark and @bender would like a better user experience, especially when threads break due to edits, deletions or feed location changes.
- @anth would like to see utf-8 mandated, and the threading model remain largely the same as it is today, which is primarily based on the convention of a Twt Subject anyway, Twt Hash(es) just make the threading "more precise". Anth also states that format, client and server specification/recommendations should be kept separate.
- @movq @xuu sorry you two haven't said too much really, so I'm not too sure?

Overall, the 22 votes we've had on the poll from the community (_if you can call it a community?_) have clearly shown that:

- We continue to support content-based addressing. (65/35)
- We think about formally supporting edits/deletes (60/40)
- We do not increase the use of cryptography (_thworing things like authenticity and identity out the window_) (70/30)

And overall the NPS (_net promoter score_) of "Would I recommend Twtxt to a friend" is a whopping 7/10 (_which is crazy! 🤯_)

Let's have our monthly catch up soon™ (1hr) and discuss together. My own take on the direction we should take at this point is as follows:

- We continue to use hashing for the threading model.
- We think about changing this to SHA-256 for simplicity.
- We either adopt @anth's UUID approach or @lyse Dynamic URL approach.
- We continue to incrementally/progressively improve things over time as @falsifian suggested.
- We think about mandating utf-8 as @anth suggests which makes things so much easier for everyone.
- We further discuss the merits/ideas of supporting formal Edit/Delete requests or other ways to better support this in some way.
@lyse Got time now before you head off?
@lyse Got time now before you head off?
@xuu Oh geez! Is this anywhere near you?
@xuu Oh geez! Is this anywhere near you?
@falsifian Thank you! 🙏
@falsifian Thank you! 🙏
If we want this though (_or some of us do_) I will probably have to make the hard decision here to just fork from Twtxt entirely and define a completely new spec. If we care about the UX we need a few properties (_some of which we have, some of which we don't have and some of which are "weak"_):

- Authenticity
- Integrity
- Precision

The last one involves _actually_ supporting the notion of "Edits" and "Deletes" IMO more formally. Without this it would be quite hard to support a strong/good UX. Another way to think about this is "Versioned Twts".
If we want this though (_or some of us do_) I will probably have to make the hard decision here to just fork from Twtxt entirely and define a completely new spec. If we care about the UX we need a few properties (_some of which we have, some of which we don't have and some of which are "weak"_):

- Authenticity
- Integrity
- Precision Versioning

The last one involves _actually_ supporting the notion of "Edits" and "Deletes" IMO more formally. Without this it would be quite hard to support a strong/good UX. Another way to think about this is "Versioned Twts".
If we want this though (_or some of us do_) I will probably have to make the hard decision here to just fork from Twtxt entirely and define a completely new spec. If we care about the UX we need a few properties (_some of which we have, some of which we don't have and some of which are "weak"_):

- Authenticity
- Integrity
- Precision Versioning

The last one involves _actually_ supporting the notion of "Edits" and "Deletes" IMO more formally. Without this it would be quite hard to support a strong/good UX. Another way to think about this is "Versioned Twts".
I think the only legit way of preventing this kind of "spoofing attack" would be:

> Digitally Sign Twts: Each Twt could be digitally signed using a private key associated with the UUID. The signature would be calculated over the concatenation of the UUID, timestamp, and content. The public key could be published along with the feed so anyone can verify the authenticity of the Twt by checking the signature. This approach ensures that only the true owner of the UUID (and the corresponding private key) can produce valid hashes.

Which leads us to more Cryptography. Something which y'all voted against.
I think the only legit way of preventing this kind of "spoofing attack" would be:

> Digitally Sign Twts: Each Twt could be digitally signed using a private key associated with the UUID. The signature would be calculated over the concatenation of the UUID, timestamp, and content. The public key could be published along with the feed so anyone can verify the authenticity of the Twt by checking the signature. This approach ensures that only the true owner of the UUID (and the corresponding private key) can produce valid hashes.

Which leads us to more Cryptography. Something which y'all voted against.
@bender This is sadly where you need two things:

- A /twtxt.txt.sig (_detached signauture_)
- Or a way to sign the # uuid = with a key that can be verified.

Hmmm and as I write this actually, I _think_ this doesn't work either, because you can still just copy it regardless. Hmmm @xuu help me out here? How do we prevent "spoofing"? 🤔
@bender This is sadly where you need two things:

- A /twtxt.txt.sig (_detached signauture_)
- Or a way to sign the # uuid = with a key that can be verified.

Hmmm and as I write this actually, I _think_ this doesn't work either, because you can still just copy it regardless. Hmmm @xuu help me out here? How do we prevent "spoofing"? 🤔
> That page says “For the best experience your client should also support some of the Twtxt Extensions…” but it is clear you don’t need to. I would like it to stay that way, and publishing a big long spec and calling it “twtxt v2” feels like a departure from that. (I think the content of the document is valuable; I’m just carping about how it’s being presented.)

It's for this reason I'd like to try changing the Twt Hash extension to use SHA-256 which is a far more common tool available pretty much everywhere. I _think_ the effort involved in "precise threading" (_using content addressing_) becomes much easier to "author" (_note that participating in an existing thread has always been trivial, just copy the Twt Subject in your Twt_).
> That page says “For the best experience your client should also support some of the Twtxt Extensions…” but it is clear you don’t need to. I would like it to stay that way, and publishing a big long spec and calling it “twtxt v2” feels like a departure from that. (I think the content of the document is valuable; I’m just carping about how it’s being presented.)

It's for this reason I'd like to try changing the Twt Hash extension to use SHA-256 which is a far more common tool available pretty much everywhere. I _think_ the effort involved in "precise threading" (_using content addressing_) becomes much easier to "author" (_note that participating in an existing thread has always been trivial, just copy the Twt Subject in your Twt_).
> Again, I like this existing simplicity. (I would even argue you don’t need the metadata.)

I argue you do. It's nice to have a "@nick@domain It's also quite nice to have a visual representation of the feed too. description can be optional. Without this, feeds are a bit too "bland" IMO.
> Again, I like this existing simplicity. (I would even argue you don’t need the metadata.)

I argue you do. It's nice to have a "@nick@domain It's also quite nice to have a visual representation of the feed too. description can be optional. Without this, feeds are a bit too "bland" IMO.
@falsifian Yeah I agree with this actually (_introducing too many changes at once is often a bad idead_):

> but IMO that shouldn’t be done at the same time as introducing new untested ideas
@falsifian Yeah I agree with this actually (_introducing too many changes at once is often a bad idead_):

> but IMO that shouldn’t be done at the same time as introducing new untested ideas
@bender Bahahahahahahaha 🤣

This is why we need "authenticity" 🤣 Yes if you copied my feed's UUID, then you'd end up generating identical hashes to me if we posted at identical times with identical timestamps. Not good 😌

> Also, was the dot after the timestamp intended?

No, sorry.
@bender Bahahahahahahaha 🤣

This is why we need "authenticity" 🤣 Yes if you copied my feed's UUID, then you'd end up generating identical hashes to me if we posted at identical times with identical timestamps. Not good 😌

> Also, was the dot after the timestamp intended?

No, sorry.
For example a v2 spec _might_ just simply mandate the following as a starting point:


cat <<EOF
# nick = $USER
# avatar = https://example.com/$USER.png
# description = Hi 👋 I'm Bob!
# uuid = 7E9BC039-4969-4296-9920-4BACDBA8ED5C

2024-09-28T11:19:25+10:00   Hello World!
EOF > ~/public_html/twtxt.txt


And:

- Serve your file with Content-type: text/plain; charset=utf-8
For example a v2 spec _might_ just simply mandate the following as a starting point:


cat <<EOF
# nick = $USER
# avatar = https://example.com/$USER.png
# description = Hi 👋 I'm Bob!
# uuid = 7E9BC039-4969-4296-9920-4BACDBA8ED5C

2024-09-28T11:19:25+10:00.   Hello World!
EOF > ~/public_html/twtxt.txt


And:

- Serve your file with Content-type: text/plain; charset=utf-8
For example a v2 spec _might_ just simply mandate the following as a starting point:


cat <<EOF
# nick = $USER
# avatar = https://example.com/$USER.png
# description = Hi 👋 I'm Bob!
# uuid = 7E9BC039-4969-4296-9920-4BACDBA8ED5C

2024-09-28T11:19:25+10:00   Hello World!
EOF > ~/public_html/twtxt.txt


And:

- Serve your file with Content-type: text/plain; charset=utf-8
@falsifian I don't have a problem with continuing the way we have been for the past ~4 years, little extensions and improvements that we try along the way. That has worked quite well 💪 As a blind person myself, I can totally empathise with reading a full (_lots of text_) spec. Even if we decide to combine all the ideas into a full fleshed out v2 spec, it _might_ be worthwhile having a cut-down version that is as simple as it can be a no less.~
@falsifian I don't have a problem with continuing the way we have been for the past ~4 years, little extensions and improvements that we try along the way. That has worked quite well 💪 As a blind person myself, I can totally empathise with reading a full (_lots of text_) spec. Even if we decide to combine all the ideas into a full fleshed out v2 spec, it _might_ be worthwhile having a cut-down version that is as simple as it can be a no less.~
> Deprecating non-UTC times seems reasonable to me, though.) Having a big long “twtxt v2” document seems less inviting to people looking for something simple. (@prologic you mentioned an anonymous comment “you’ve ruined twtxt” and while I don’t completely agree with that commenter’s sentiment, I would feel like twtxt had lost something if it moved away from having a super-simple core

See https://yarn.social (especially this section: https://yarn.social/#self-host) -- It really doesn't get much simpler than this 🤣
> Deprecating non-UTC times seems reasonable to me, though.) Having a big long “twtxt v2” document seems less inviting to people looking for something simple. (@prologic you mentioned an anonymous comment “you’ve ruined twtxt” and while I don’t completely agree with that commenter’s sentiment, I would feel like twtxt had lost something if it moved away from having a super-simple core

See https://yarn.social (especially this section: https://yarn.social/#self-host) -- It really doesn't get much simpler than this 🤣
@falsifian We've been doing this for years:

> There are lots of great ideas here! Is there a benefit to putting them all into one document? Seems to me this could more easily be a bunch of separate efforts that can progress at their own pace:

See https://dev.twtxt.net
@falsifian We've been doing this for years:

> There are lots of great ideas here! Is there a benefit to putting them all into one document? Seems to me this could more easily be a bunch of separate efforts that can progress at their own pace:

See https://dev.twtxt.net
@bender I'm not following it, but someone on my pod is 🤣 And yes based on statistical evidence, I doubt you'll see a reply either 🤣
@bender I'm not following it, but someone on my pod is 🤣 And yes based on statistical evidence, I doubt you'll see a reply either 🤣
@doesnm The useragent tool now natively supports the Caddy (JSON) logfile format. 🥳
@doesnm The useragent tool now natively supports the Caddy (JSON) logfile format. 🥳
This is a 1-way feed by the looks 🤣 Maybe someone can figure out how to reach out to this person and see if they're aware and interested in something a bit more "social" (_albeit slow_) 🤣
This is a 1-way feed by the looks 🤣 Maybe someone can figure out how to reach out to this person and see if they're aware and interested in something a bit more "social" (_albeit slow_) 🤣
@falsifian Sorry I didn't make that super clear 🤦‍♂️ Be happy to see you there and some new folks 🙇‍♂️
@falsifian Sorry I didn't make that super clear 🤦‍♂️ Be happy to see you there and some new folks 🙇‍♂️
This Facebook/Meta story on storing passwords in plain text it just wow 😮 -- Like how da fuq does a company, or anyone for that matter in the business of software / technology even do this?! Like at least base64 encode the fuckers right?! (_oh wait 🤦‍♂️_)_
This Facebook/Meta story on storing passwords in plain text it just wow 😮 -- Like how da fuq does a company, or anyone for that matter in the business of software / technology even do this?! Like at least base64 encode the fuckers right?! (_oh wait 🤦‍♂️_)_
@xuu If you have time, could you help me pinpoint this bug? 🐛
@xuu If you have time, could you help me pinpoint this bug? 🐛
@lyse It's from 12pm to 4pm UTC so if you can make it at all, that'd be great 👍
@lyse It's from 12pm to 4pm UTC so if you can make it at all, that'd be great 👍
@xuu Do you think we should just detect edits at the client-level then? 🤔
@xuu Do you think we should just detect edits at the client-level then? 🤔
Probably the best idea I've heard/seen si far is @anth's idea of a feed having a uuid # uuid = (_if present_) otherwise just falling back to the URL you fetched it from and dropping the idea of a feed # url = entirely.
Probably the best idea I've heard/seen si far is @anth's idea of a feed having a uuid # uuid = (_if present_) otherwise just falling back to the URL you fetched it from and dropping the idea of a feed # url = entirely.
@lyse Yup you're right, it's s terrible idea 💡
@lyse Yup you're right, it's s terrible idea 💡
Well the poll clearly shows:

- ~65/35 in favor of Content Addressing
- ~60/40 in favor of supporting Edit/Delete
- ~70/30 against more cryptograph

And an NPS score of 7/10 🤣~
Well the poll clearly shows:

- ~65/35 in favor of Content Addressing
- ~60/40 in favor of supporting Edit/Delete
- ~70/30 against more cryptograph

And an NPS score of 7/10 🤣~
@bender Zero _technical_ issues 🤣 I never claims otherwise 😅
@bender Zero _technical_ issues 🤣 I never claims otherwise 😅
@bender Yes but you've got me curious now 😅
@bender Yes but you've got me curious now 😅
Okay, co-founder of Wordpress and CEO of Automation.

What has the poor guy done? 🤣
Okay, co-founder of Wordpress and CEO of Automation.

What has the poor guy done? 🤣
@david Who's Matt Mullenweg? 🤔
@david Who's Matt Mullenweg? 🤔
Like really tbh, it's just a matter of abstracting out the "fetching" part of your client. There are _zero_ issues with fetching Gopher/Gemini hosted feeds. They just lack any mechanisms for Discovery and Caching.
Like really tbh, it's just a matter of abstracting out the "fetching" part of your client. There are _zero_ issues with fetching Gopher/Gemini hosted feeds. They just lack any mechanisms for Discovery and Caching.
@doesnm Still haven't received it. Did you send to james at mills dot io? 🤔
@doesnm Still haven't received it. Did you send to james at mills dot io? 🤔
@movq I don't think I intend to either tbh for yarnd. If there was any poorly worded "things", it was just merely pointing out lacking capabilities for caching and discovery.
@movq I don't think I intend to either tbh for yarnd. If there was any poorly worded "things", it was just merely pointing out lacking capabilities for caching and discovery.
@bender Oh so what you're saying is "we" (royal we) ruined Twtxt 🤣
@bender Oh so what you're saying is "we" (royal we) ruined Twtxt 🤣
@doesnm Are you sure? Not seen the mail yet...
@doesnm Are you sure? Not seen the mail yet...
@aelaraji LOL 😂 Here's one for you:

> You can take IRC out of my cold 🥶 dead 😵 hands 🙌
@aelaraji LOL 😂 Here's one for you:

> You can take IRC out of my cold 🥶 dead 😵 hands 🙌
Anyway I've setup an alias now 🤣