#dev 2025-12-24

2025-12-24 UTC
#
[tantek]
if "article" = "post" then yeah!
#
[tantek]
Instagram << ^ appears to be new behavior sometime between 2025-11-12 (ogp desc = caption, no meta keywords) and 2025-12-14
#
Loqi
ok, I added "^ appears to be new behavior sometime between 2025-11-12 (ogp desc = caption, no meta keywords) and 2025-12-14" to the "See Also" section of /Instagram https://indieweb.org/wiki/index.php?diff=106998&oldid=106997
#
[tantek]
Instagram << ^ new behavior for new posts since ~2025-12 only. Posts created before 2025-11-12 do not seem to have meta keywords or an auto-generated og:description (needs further narrowing down).
#
Loqi
ok, I added "^ new behavior for new posts since ~2025-12 only. Posts created before 2025-11-12 do not seem to have meta keywords or an auto-generated og:description (needs further narrowing down)." to the "See Also" section of /Instagram https://indieweb.org/wiki/index.php?diff=106999&oldid=106998
#
ulhar4409
post and article do seem interchangeable to me for the most part
#
gRegor
in indieweb terms, it's a "photo" post (or multi-photo)
#
ulhar4409
i am bad at labels to be fair
#
ulhar4409
one of the Four Difficult Programming Issues
#
gRegor
I thought there was an OGP type for "photo" too but maybe not according to the (admittedly old) https://ogp.me/
#
gRegor
So yeah, "article" probably is the most supported by the search engines, which is what they're going for
troojg, [dmitshur], grufwub and sp1ff` joined the channel
#
[aciccarello]
I think article and profile are the only ogp types I've seen in the wild
gRegor, [Sophia_wood], Daijo-, Daijo, [Murray], Daijo|, [jeremycherfas], ttybitnik, barnaby, balintm, posixlycorrect, brian434, troojg, [aciccarello]1, thegreekgeek, Waylon_Staff and [tw2113] joined the channel
#
[Al_Abut]
I'm glad so many people came out of the woodwork last night about accidentally publishing drafts to feed readers! I was mortified when I realized what happened and that there was no way to unring that bell.
#
[Al_Abut]
So what have you all done when the new post was ready to go in its place?
#
[Al_Abut]
I want to keep the same slug for a variety of reasons, so it seems like my options are:
#
[Al_Abut]
2) Have roughly the same URLs in the `<link>` and `<guid>` but add a parameter like `?updated=2025-12-24` to the `<guid>`
#
[Al_Abut]
If that all looks correct, I'll blog it out as a best practice too, since I didn't see one when searching for answers so far.
#
[Al_Abut]
1) Be ok with triggering a new entry, there's no replacing the old wrong one.
#
[Al_Abut]
3) Set `isPermaLink=“false”` as an attribute in the `<guid>` (even though I'm not 100% sure what that does, just seems like vague hygiene reasons)
#
[tantek]
Another approach would be start all slugs with "draft-" and then consciously remove it before publishing. Your system could also look for "draft-" in the slug and block publishing it until you removed the prefix
#
[schmarty]
[Al_Abut] - i'm under the impression many feed formats and readers do support updates. they just don't necessarily tell the user that the content changed. so if someone has already read the old version it will stay marked as read.
#
[artlung]
"hygiene" is not a _wrong_ way to describe it, ultimately the feed's code ought to be descriptive. and isPermalink=false or true is a signal about usage of the value. isPermalink=false means "just represent uniqueness"
#
[tantek]
I remain skeptical about feed GUIDs for same-origin policy limitations (or violations) and will postpone reading that "RSSBoard" article because I have a feeling I’m going to disagree strongly
troojg joined the channel
#
[schmarty]
it sounds like, from a practical standpoint, you want to treat the old entry like an oops and show a new entry to folks. for feed formats with GUIDs, that means you'll want a new GUID.
#
[artlung]
also it's worthwhile to know GUID comes from outside rss entirely. https://en.wikipedia.org/wiki/Universally_unique_identifier
ttybitnik joined the channel
#
[Al_Abut]
[schmarty] yep, need a new GUID, hence the param spam to trick readers into thinking there's a new one and creating a new entry.
#
[Al_Abut]
I should clarify and say that as far as I can tell, there's no _universally-applicable_ way to replace the old entry with a new one, so the fact that some do and others don't isn't worth the risk of republishing with the old GUID. Hence embracing the double entry as a lesser of two evils, if that makes sense?
#
gRegor
If the permalink is the guid in the RSS, that "draft-" in the slug would let the updated post show up as a new post when you remove it (if I understood that correctly)
#
Loqi
it is probable
#
gRegor
Loqi confirmed
#
[tantek]
Though I would omit all "draft-" slugs from the RSS completely thus avoiding the whole situ
#
[schmarty]
[Al_Abut] the ol' cache-busting query string
#
gRegor
Right, just thinking even if there was a mistake in that and a draft- prefix post got out, like happened with AL
#
[Al_Abut]
[tantek] & [gRegorLove] no need for draft- prefix as a solution, I have a drafts folder. That's what makes it even more embarrassing, haha. Don't know what I was thinking with breaking my own protocol.
#
gRegor
What criteria does Astro use to build the feed? Is it just everything basically?
#
[Al_Abut]
(also appreciate the all caps AL for anti-a.i. disambiguation, even if it sounds like you're shouting)
#
gRegor
Since the drafts folder didn't stop it :)
#
gRegor
haha, may not always do it. With a short name it doesn't look as aggressive at least?
#
[Al_Abut]
No no, it's a user error - I made the draft in the writing folder, not the drafts folder. Not an Astro error unless I start using Astro as my superhero name to avoid being confused for a chatbot
#
[Al_Abut]
…and get confused for a web framework or baseball team instead, whoops
#
gRegor
Gotcha!
#
gRegor
[Al_Abut], delete the draft post, republish with "-2-electric-boogaloo" added to the slug
#
[Al_Abut]
I deleted the draft post but don't want to change the slug, hence the parameter thing I've been angling for
#
[Al_Abut]
Adding “-3-no-way-dude-my-knees-can't-handle-dancing” would change the slug, right?
#
[Al_Abut]
[artlung] that article makes sense to me now but holy hell would it have been confusing before I did a deep dive into GUID. I still can't find a single valid practical and common use case for the `isPermaLink` attribute and that's why I kept spinning out about what to do. I figured there must be a reason and I wasn't finding it, until I learned that the URLs in GUID is also mainly a hygiene pattern too because the LINK tag is what does the
#
[Al_Abut]
real lifting.
#
[Al_Abut]
The GUID could be “banana:mo:mana”
#
[Al_Abut]
It's just a unique string
#
[Al_Abut]
Right?
#
[artlung]
Yes! _The GUID could be “banana:mo:mana” [Al_Abut]++_
#
[artlung]
isPermalink is a signal to consumers and clients of RSS. Probably software authors.
#
[artlung]
Not directly user-facing attribute value.
vriska joined the channel
#
[Al_Abut]
“Probably” is what I kept running into
#
[Al_Abut]
Can't find an actual working use case for what it's used for
#
[Al_Abut]
Maybe some of the fancy readers that [schmarty] mentioned that know how to dedupe entries? But I would've guessed they use the LINK entry for that.
#
[schmarty]
[Al_Abut] unfortunately, you are unlikely to find any certainty in the world of feed readers outside of the ones you test by hand. for what it's worth i think if you can think of a feature that is complicated in any way, feed readers will not do that. 😂
#
[Al_Abut]
That's great feedback. Strategies for testing is what I should be asking for, haha
#
[Al_Abut]
Like, what do I know how things break or not without 1) installing as many feed readers as possible and 2) publishing a private RSS for testing them all out?
#
[Al_Abut]
It's like I'm back in the browser wars
#
gRegor
I've been pretty content to run it through feedvalidator.org and make it pass as best as possible, then subscribe in one "big" reader. I think I used inoreader for that back in the day, but it's been over 5 years.
#
gRegor
Lately I guess I've switched that second part out to using Monocle, since it lets me test out both direct h-feed subs as well as Atom subs
#
[tantek]
[schmarty] is 100% correct and yes AL it is like the browser wars before we had proper tests, test suites, implementation reports
#
gRegor
Hm did feedvalidator die? lol
#
[tantek]
I won't believe anything about what GUID or isPermalink supposedly does or doesn't do until someone shows me actual tests and implementation reports of readers because AFAIK no such thing exists
#
[artlung]
I love the user-centricity of the question and the lack of *certainty* about how the feed readers behave is a function of the space. Often in software producing data exports of various sorts we *can't* know precisely how the data will be used. Which is why we try to be as descriptive as possible about what the data contains, what kind of values it contains, what data it can and can't contain. What are date formats? How do we know a date is
#
[artlung]
"correct"?
#
[tantek]
Validator != test suites
#
[artlung]
And as others are saying, validating the feed we use as a weak proxy for whether the feed is "okay."
#
gRegor
I was referring to my comment above
#
gRegor
basically saying testing my feeds in every feed reader (or even just several) is overkill for me
#
[tantek]
Feed validator does not reflect what will or won't work in any given feed reader. It just gives you an excuse to file bugs against feed readers and the smugness of knowing your feed isn't the problem
#
[artlung]
ACID test for feedreaders when?!
#
[tantek]
gRegor++ yes, very overkill. Which is why I won't bother with janky untested RSS (or other feed file) features
#
Loqi
gRegor has 39 karma in this channel over the last year (125 in all channels)
#
[schmarty]
as a developer, i find validators good for really basic stuff like "i have not produced unparseable garbage" and then i test in Monocle's preview, and then i stop worrying abou tit.
#
[schmarty]
*about it
#
[artlung]
I tried to take over an old stack overflow question to quantify what html "works" in feedreaders and it was quickly shut down. There are no such test suites against feedreaders.
#
[artlung]
shut down as in a valid answer from Kevin Marks got deleted.
#
[schmarty]
because, to add on to gRegor's "overkill" comment, discovering and fighting the inconsistencies is a losing battle and makes me sad. 😂
#
[tantek]
Yep. So let them eat granary
#
[Al_Abut]
I mean validators are fun and all but I'm still stuck at the conceptual level of what it's even supposed to be validating
#
[schmarty]
is there a particular reason you really want the permalink for this post not to change?
#
[Al_Abut]
Like wtf is this jumped up isPermaLink attribute thinking it’s going to do for me when it's riding dirty inside a tag that's apparently just a unique string?!?
#
[artlung]
Oooh. FrESH topic: validators! what are they good for?! Tuesday.
#
[artlung]
huge question masquerading as a tiny question.
#
[schmarty]
haha, i get the feeling i'm coming at this from a place of pain and problem-solving but [Al_Abut] is approaching it with curiosity and delight. i will stop Trying to Fix It™ and let you cook! 😂
#
[Al_Abut]
Oh, ha!
#
[artlung]
Don't let it devolve to "what is code anyway why does any code matter" - focus on what the intent of the design of these feeds was and then consider whether it's working, or not, and the degree of success or failure.
#
[Al_Abut]
[schmarty] Sorry, I thought I was clear earlier that I found a fix (just add parameters to the existing url) and was just looking for reasons why I shouldn’t do it that way because I wasn’t clear what the drawbacks were. And also why I should change the url instead of add parameters
#
gRegor
I think `isPermalink` is supposed to tell the reader "this is a URL", otherwise it could just be a random, unique identifier. I've seen CMS in the past just use the sequential post ID in that GUID field, not a great idea haha
#
[tantek]
[artlung] ++ yes, this! Go back to "what *user* problem are you solving?" and dig yourself out of the format pedanticisms rathole
#
Loqi
[artlung] has 38 karma in this channel over the last year (218 in all channels)
#
gRegor
Glad it got sorted with query params! Nice
#
[schmarty]
[Al_Abut] i definitely misunderstood and thought you were still pondering. params work fine! nice work.
#
[Al_Abut]
[schmarty] to wrap up that line of thought on the practical level (and to unleash the rest of the unfettered bikeshedding that I also prodded along, haha) I think that changing the slug itself would have achieved the same effect of making a new post, but I have a photo gallery tied to the old post’s slug and would've risked breaking some other backend machinery about bidirectional links between related posts and galleries
#
[artlung]
I *used to* painstakingly add Open Graph data to all my posts and pages. I wanted good metadata. I do like the *intent* but in practice their utility was less than hoped. I have retreated to "I want preview images to show up in social media sometimes" and include *only* that for my practical benefit.
#
[schmarty]
[Al_Abut] makes sense! i believe you are correct about the effect and a good reason not to change the permalink!
#
[Al_Abut]
And oh hey, speaking of photos, the last approval from attendees rolled in yesterday, so I'm happy to share the draft state of the pics from the last IWCSD event: https://alabut.com/photos/iwcsd2025/
#
[Al_Abut]
(behold that fancy beautiful slug that I didn't want to change, haha)
#
[schmarty]
artlung: same same. i have some big regrets about how my site attempts to make OG/twitter metadata for social previews and would like to overhaul this to reduce it greatly.
#
[artlung]
Similar situations with robots.txt files, PICS labeling, JSON-ld metadata, dublin core metadata, Facebook ownership meta, twitter preview cards. etc tc.
#
[artlung]
We all get to decide what we feel compelled to participate in (if any)
#
[Al_Abut]
And just for funsies, if you all want to see how broken the draft post was that went out in bullet list format: https://alabut.com/drafts/iwcsd2025/
#
[artlung]
For us in indieweb, rel=me is really useful, valuable for verification and authentication. auth endpoints too. hcard too. h-feed especially. We are making a case in favor of their utility. And last night gRegor got to show how he uses that markup to avoid sidefile generation entirely.
#
[schmarty]
i have a new commodore 64 ultimate. it emulates dial-up networking with telnet, and there are BBSes with IRC clients and text-based web browsers. i should do an indie reader de-make and continue regressing into retro-computing. 😂
#
[artlung]
NICE [schmarty]
#
[artlung]
That's a great post outline [Al_Abut] (I said that last night too)
#
[Al_Abut]
Thanks dude! I still have the *cringe* feeling of showing my underwear on half-finished stuff but can power through it sometimes.
#
gRegor
Yep yep, though was disappointed to find it appears some readers with WebSub subscriptions are using the final granary URL instead of mine.
#
[Al_Abut]
And might learn to do more of that if it's actually useful to others, that was really surprising to hear
#
gRegor
Actually [artlung], if you wouldn't mind checking in the internals of your FreshRSS, can you confirm if it's showing subscribed to my /stream URL, or the granary.io URL?
#
gRegor
I know you entered the /stream URL in the subscription, but wondering if it silently updated it after the redirect and rel=self on the granary URL
#
[Al_Abut]
[gRegorLove] ooo, does that mean that after I dropped off last night, the cool kids after party had a session on how to surface the microformats feed to social readers and Granary to the legacy RSS ones? I was going to ask if that's even possible, before I switched mine over to the Granary one hopefully sometime this week.
#
gRegor
!tell [snarfed] with Granary HTML -> Atom conversion, is it possible to pass in a different `self` URL in the query parameters?
#
Loqi
Ok, I'll tell them that when I see them next
#
gRegor
[Al_Abut], not a session, heh. I thought you were there, but maybe not. I just demoed how I set up https://gregorlove.com/stream/feed.atom as a redirect to Granary, which in turn is parsing my h-feed to return Atom
#
[Al_Abut]
[artlung] oh cool! Just had another popup idea: practical use cases for microformats. Admittedly a self-serving one where I'd do all the learning and zero explaining if I hosted it.
#
[Al_Abut]
Triggered the thought because I don't have a great grasp on rel=“me” rel=“alternate” or really anything at all so far actually other than maybe u-photo
#
[Al_Abut]
[gRegorLove] oh yeah, that demo
#
gRegor
what is rel-alternate
#
Loqi
rel=alternate is a way to indicate that a hyperlink links to an alternate representation of the current page https://indieweb.org/rel-alternate
#
[Al_Abut]
Definitely saw that one, just didn't know if there was an automated way to let social readers know they can parse the page directly and skip the granary url
#
[schmarty]
[Al_Abut] link RELations as a concept and in practice have a deep and drama-filled history 😄
#
[Al_Abut]
[gRegorLove] going to be blunt here - that wiki entry did nothing to clear things up for me
#
gRegor
Fair!
#
[Al_Abut]
At least in terms of grokking the use case I was describing?
#
gRegor
If you look at gregorlove.com/stream source...
#
gRegor
The rel-alternate there is saying "The Atom alternate version of this page is https://gregorlove.com/stream/feed.atom
#
[artlung]
A lot of great the great books about design in the world point out that MOST OF THE BUILT WORLD exists as it does because of such conflicts and decisions. Railroad gauge. Curb cuts. Tire width. Lifeboats per passenger. Everything is the result of practice and experience. Software is the product of human effort.
#
gRegor
So it helps a consumer like a feed reader discover the URL it should subscribe to
#
gRegor
I didn't test this now but should work in theory: if you went to Feedly and entered https://gregorlove.com/stream/ to subscribe, it should find that Atom feed and subscribe to that. If it finds multilple alternates, it should give you the option which one to subscribe to.
#
gRegor
And it should also use the `title` attribute in that UI. In this case it would be something like "Subscribe to: 'All Posts — gRegorLove.com (Atom)'"
troojg joined the channel
#
gRegor
Artemis is probably a good test for this actually!
#
gRegor
What is Artemis
#
Loqi
Artemis is a calm web reader developed by capjamesg that updates once a day, has a minimal UI, and is free to use at https://artemis.jamesg.blog https://indieweb.org/Artemis
#
gRegor
Because I'm 99% certain it does that discovery, and might as well use an indieweb service as an example, haha
#
[artlung]
[gRegorLove] here's what my management screen looks like. I am not sure if I have access to know what the source feed url handling if there's a redirect.
#
gRegor
Ah yeah, the Feed URL field there
#
gRegor
Well, beans.
#
gRegor
Nice that it holds onto the original URL in the Website URL field though
#
[artlung]
Also in that screen [Al_Abut] there's a note about _"Article unicity criteria" ..._
#
[tantek]
Wonder if returning a 307 would help it keep your original feed URL gRegor
#
[tantek]
what is unicity?
#
Loqi
It looks like we don't have a page for "unicity" yet. Would you like to create it? (Or just say "unicity is ____", a sentence describing the term)
#
[artlung]
FreshRSS gives me an option to check for uniqueness of an article "has it seen it before" ?
#
[tantek]
Sounds like a future dystopia singular urban settlement
#
[tantek]
The Unicity
#
[artlung]
I would use the term "uniqueness" but of course everything gotta be complicated.
#
gRegor
[tantek], yeah I will probably update to 307 but that won't impact existing subscriptions.
#
gRegor
I'm hoping I can customize the rel=self in what granary generates, if I'm reading WebSub right, it should update the existing subs that way
#
[tantek]
True. Feed readers need a (Rediscover) button next to the "website" field
#
gRegor
[Al_Abut], taking a screenshot from Artemis demoing the feed discovery and how the rel=alternate works with it
u3ndb5pshbmte, u3yhdkmhrsndg, czmrfxxt6bvm, u2672pjdeolzs, ixj7ynqxdhny and o3sjfushppvn joined the channel
#
gRegor
[Al_Abut], https://indieweb.org/File:2025-12-24-Artemis-feed-discovery.png So the first option there is Artemis giving me the option to subscribe directly to my stream page, parsing the h-feed. The second option is the Atom feed it found in the rel-alternate tag on my stream page.
ldabflpwgexw, wpm2rub4jyhq, yf6nhunfpdwc, f6qelqjlhn7u, tnnsm3y3csxf, bhewb3tuxtwe, oxasfjzdclsm, u6s6ntcrsbthi, lnkpyvxrknqb, tttxyrwy4pbt, j7r4s3ncjfg7, iazfc363rlr3 and j52u47ks2esf joined the channel
#
[Al_Abut]
[gRegorLove] oh cool, so it looks like I do understand how rel=“alternate” works for a single feed, but is there a way to specify multiple feeds and have the reader pick the one it understands first?
#
gRegor
You can have multiple rel-alernates, sure
#
gRegor
Most feed readers *should* present you the choice instead of just picking one, but if they only support one (say only support Atom, not RSS), then they could automatically choose that one
#
[Al_Abut]
ok, and then how do readers handle that? give the user a choice? use the first one it understands?
#
gRegor
yeah, give a choice, like Artemis is doing
#
[Al_Abut]
hmm
#
[Al_Abut]
not exactly my style
#
[Al_Abut]
haha
#
[Al_Abut]
I’d rather have the social ones take the microformats feed and then all the legacy ones take the granary
barnaby joined the channel
#
[Al_Abut]
But the only universal solution I can think of is to serve the granary one to everyone. And somehow keep the microformats one as a secret handshake for friends.
#
gRegor
Social ones will usually present the mf2 one first
#
gRegor
Artemis is, Aperture does as well
#
gRegor
Yeah for least friction for anyone using a feed reader, you'll want rel-alternates listed. Otherwise you'd have to include a regular link to the RSS feed and some instructions to copy that link and paste it. Which sure, some portion of RSS users are familiar with, but it's just extra work.
#
gRegor
Vs if someone is using a social reader, mf2 as the first option is reasonable
pea353iouu4v and px7txphyucfk joined the channel
#
[Al_Abut]
*sigh* Yeah, I don’t think it’s less friction to have multiple feeds listed, for my use case, since they’re all identitcal
#
[Al_Abut]
e.g. not photos, notes, etc
#
gRegor
[Al_Abut], I'm not suggesting you specifically list multiples
#
gRegor
You don't list an mf2 feed with rel-alternate. it just exists in the HTML
#
[Al_Abut]
actually I don’t think it’s great UX to have multiple types of feeds anyway, but that’s a design decision
#
[Al_Abut]
yeah, gotcha
#
[Al_Abut]
but then how does that work if the page is a blog post, not the feed page itself?
#
gRegor
Agreed, espeically if you're listing an RSS and Atom feed of the same thing. Just pick one feed
#
gRegor
Hang on, gonna try to deal with this spam
#
gRegor
!kick n3xn53akdpli
#
Loqi
n3xn53akdpli joined 29443512 minutes ago and can no longer be kicked this way
#
gRegor
!kick tmt4ymrxqx7v
#
Loqi
tmt4ymrxqx7v joined 29443513 minutes ago and can no longer be kicked this way
u7cmy3pl2xtjm joined the channel
#
gRegor
[Al_Abut], one intended instance of multiple rel-alternates is WordPress which usually offers an RSS for posts, and a separate RSS for comments. I think post permalinks advertise both of those.
#
[Al_Abut]
yeah totally, I can see that as a useful pattern
#
[Al_Abut]
and I might go down that route with offering a photos-only feed eventually
#
gRegor
Looking at a GWG post as an example: https://david.shanske.com/2025/12/21/jewish-museum-of-florida/ has an Atom feed for all posts, one for all comments, one for comments on this specific post, one in mf2 JSON format, and one in JF2 JSON format.
#
Loqi
[preview] Visited the Jewish Museum of Florida today. The original synagogue was built in 1929, and the second, built in 1936 and now form the museum opened in 1995. I came here to take the Jewish Walking Tour of Miami Beach. Which I had taken before in 2015....
#
[artlung]
Apologies all for the extreme amounts of really ugly and odious spam in multiple channels. Folks are working on addressing it. Appears to be affecting more than just our channels. Multiple IRC nodes affected out on the internet, I think I'm saying that right.
#
gRegor
!kick g37bq745orqs
#
gRegor
!kick zmchakhnsfab
#
gRegor
!kick fh4k32x7xqkq
#
gRegor
!kick nlc4sw4g
#
gRegor
!kick vcv2
wlrdv74, gRegor, Maxpm, troojg, barnaby, [gRegorLove], [snarfed], crouns, fleodies, meipy, groitiest, treitiest, vieling, fleapies, ceurs, flaevf, troedest, zaasp, wroesf, ceiny, ruities, gaaver, guilc, flaapf, taenf, sniitled, traudian, luofiest and truetest joined the channel