I will aim to have most issues bugs and user experience problems, identified and fixed by this weekend!
And if we can compile a list and file issues for feeds, twtxt.app and anything else as issues for when i get back š feature requests, bug reports. etc š¤
FYi š Iām aware of an optimist precomputed hashing bug on the new twtxt.app 𤯠Trying to work with @bender@twtxt.net remotely on my vacation yo fix it š¤£
@movq@www.uninformativ.de I figure there is a bug somewhere, but where?

Whatās the bug?
@movq@www.uninformativ.de we found a bug. @prologic@twtxt.net loves it!
I think I fixed this bug!
@lyse@lyse.isobeef.org Found it and fixed it! š The crawlerās discovery spider was fetching every feed a second time, without any conditional headers (plus a couple of other politeness bugs: redirected feed URLs never stored their cache validators, and there was no floor between re-fetches). Now every feed is fetched at most once per crawl, always with If-Modified-Since / If-None-Match, and never more than once per 15m no matter what. Just deployed ā please keep an eye on your access logs and let me know if you still see anything impolite from the crawler š
@lyse@lyse.isobeef.org Thanks! Iāll look into that! Could be a bug in the crawler.
Hey folks š Today I announce the re-release of the Twtxt Search Engine now live and running and actively re-crawling and re-indexing. š Please report bugs or any useability issues to me! š #Twtxt #Search
My mate and I hiked up the backyard mountain. We got 25°C and quite some wind, so it was actually not too terrible. The wind could have blown harder or the temps a little lower, but oh well.
I saw the squirrelās bushy tail stick up on the forest floor in the sunlight and immediately thought of this cute little feller. Since it didnāt move at all, even when we came closer, I got irritated and reconsidered that it might actually be some kind of dried up farn. But then we also were able to see its body. Unfortunately, the squirrel ran up the tree too quickly, so all the shots are kinda crap.
At one flower spot, there were sooo many butterflies, wasps, flies, bugs and other insects. The botanic was completely crowded.
The workers were transferring logs from one log truck to the other in a parking lot. Iāve never seen this happening before. When we passed the same place on the way home, they had moved logs into a sea container. That was surprising. This semi wasnāt there on the way there. One log was probably too long and sticking out the container, so they probably had to wait for somebody to return with a chainsaw. Crazy that theyāre shipping logs from here probably overseas. Why else would they put them in a sea container?
After our first break, a blackbird was really posing for us with his worm in the dark shade.
Today was my first time I ever saw a hummingbird hawk-moth (TaubenschwƤnzchen) for real. My mate photographed them many, many times before, but I never came across one myself. So, that was really special.
The forest service installed an outdoor table with two benches next to the timber lion, that was cool to see. We sat down for a few minutes and enjoyed both the view into the Fils valley and ant on the tabletop, but the sun was beating down too heavily on us, so we had to move on.
All in all, it was a very nice few hours long hike. Enjoy! https://lyse.isobeef.org/waldspaziergang-2026-07-03/
@lyse@lyse.isobeef.org oh yes! And, when I mow the lawn (which reminds me I need to mow the front soonish), you can add dust, bugs, and grass blades to the equation. Just ālovelyā. š
@lyse@lyse.isobeef.org If I were to guess: They might have done so to avoid bug reports from users with heavily outdated versions. š«¤
there was supposed to be a plus in there but it got eaten by a bug!
@lyse@lyse.isobeef.org Interesting approach. š¤
The master branch should never be in a broken state (apart from bugs I donāt know about). Any intermediate state during the development of a larger feature will happen in a different branch.
I mean, yeah, but ⦠I donāt know, I like having ātraditional releasesā as a second safety net when I write programs. I like to let things mature for a while and then I cut a new release. So itās, like, āwe have a bunch of new features and fixes here, and to the best of my knowledge this works fine nowā. But maybe Iām just paranoid. š¤
@movq@www.uninformativ.de Oh yeah, way better! :-) I didnāt spot the bug, though.
I think I could work with the feature set. I typically donāt need a lot. Until I do. :-D The message tree in tt is an example of that. But tt is also special that it needs something like this in the first place. Itās unusual.
(And of course thereās a bug because Iām an idiot. š¤Ŗ)
@itsericwoodward@itsericwoodward.com Turns out, this is a bug in my config to cache synchronization. Nickname changes in the configuration file are just not synced to the cache at startup if the feed URL already exists in the cache. I must have fixed this typo in my config ages ago, because I donāt even recall having that spelling mistake to begin with. Yet, the cache was happily showing the erroneous nickname. Composing a reply automatically adds the mentions from the conversation participants. Everything originates from the cache, so, I successfully poissoned my replies.
@movq@www.uninformativ.de Honestly I think you build the team before you need the PRs š¤ Start with relationships ā people whoāve been using your software, filing good bug reports, asking smart questions. Those are your future maintainers. The PR comes later as a formality, not a tryout š
(#vixabsa) @movq@www.uninformativ.de Honestly I think you build the team before you need the PRs š¤ Start with relationships ā people whoāve been using your software, filing good bug reports, asking smart questions. Those are your future maintainers. The PR comes later as a formality, not a tryout š
Yay finally fixed some of those annoying āMark as Readā behaviours/bugs š
<updated> of the feed, too. But for some reason, some articles were suddenly marked as new.
I wasted my entire weekend on the writeup. If you have way too much time to spare and also are interested in a bug analysis of a software that you donāt even use, I have you covered: https://lyse.isobeef.org/newsboat-time-parsing-bug-analysis/
Oh boy, it was bloody humid this morning. Just around 20°C when we left, but climbing rapidly. The flow of air when walking was okay, but as soon as we stopped, streams of sweat were pouring down on us. Luckily, it was cloudy, but the lack of wind was bad. Now, the sun is out, 29°C will be reached in an hour and Iām glad that the house is still cool. It will be a different story in a few weeks or months. Not looking forward to that at ll.
On the bright side, we saw the first tadpoles of the year and an also first, but sadly dead slow worm that probably some bird dropped on a bench next to the fountain. The fly was stuck to its feast and also cactus. The municipality fixed the railing nicely and we came across a giant patch of great looking fire bugs on the summit.
All in all, a successful stroll through the woods but for the humid heat.
@prologic@twtxt.net Ahh, I see. Okay, Iām with you there. On this high level, I can understand how the thing works.
Maybe my wording isnāt good. š¤ Letās take a real life example from what we do at work.
Thereās this AI chatbot. It gets support requests from users, so the user says something like āI need access to a particular systemā. This triggers the bot to ārunā the instructions stored in a large Markdown file, like ācheck if the user is authorized to do this, then issue the following API requestsā, and so on. This is essentially like running a little script, except itās written in natural language (German) and thereās no āscript interpreterā but just the AI.
Now, suppose that the AI doesnāt quite do what was intended. Thereās some subtle bug. How do you debug this? How do you find out how the AI came to the āconclusionā to run step A instead of step B? And how do you find out how exactly you have to change your prompt so this doesnāt happen again next time?
If this was an actual script/program instead of AI, you could repeat the request and attach a debugger or throw in some printf() or whatever. How do you do that kind of thing with AI? How do you pinpoint exactly what the problem was?
(Or is this just a stupid idea? Do we have to give up that way of thinking when using AI? Is the era of debuggability over?)
<updated> of the feed, too. But for some reason, some articles were suddenly marked as new.
Aha, yesterdayās newly added support for LC_TIME to render localized timestamps also broke the feed parsing with my LANG=de_DE.UTF-8 and LC_CTYPE=de_DE.UTF-8 environment. :-)
Atom feeds make use of RFC 3339 timestamps. They are first converted into RFC 882 timestamp representation, which is the one that RSS feeds use. However, this conversion now results in localized RFC 882 timestamps, which cannot be parsed into Unix timestamp numbers via curl_getdate(ā¦). I bet that it doesnāt know about the localization at all and expects English month and weekday names. Looking at its docs, I reckon that function was selected because of its myriad of supported timestamp formats: https://curl.se/libcurl/c/curl_getdate.html RFC 3339 is not included, though, hence the transformation up front.
The intermediate Item objects in the parser domain use std::string for the timestamp representation. This isnāt all that silly, because Newsboat supports all sorts of different feed formats with different timestamp formats. These RFC 883 timestamps are centrally parsed into time_t.
Speaking of time: Itās time to go to bed after this late bug hunting fun. :-)
You didnāt change your Atom feed by any chance yesterday or today, @movq@www.uninformativ.de? Not only do I have a metric shitton of ānewā old items in my YouTube feeds, but also a bunch of your old articles are shown as new.
I fear that this is a Newsboat bug. I rebuilt it yesterday from master.
Eehhh, what the hell is going on here!?
SELECT
printf("0x%x", (1 << 63) - 2),
printf("0x%x", (1 << 63) - 1),
printf("0x%x", 1 << 63 ),
printf("0x%x", (1 << 63) + 1),
printf("0x%x", (1 << 63) + 2)
SQLite yields:
0x8000000000000000 (instead of 0x7ffffffffffffffe)
0x8000000000000000 (instead of 0x7fffffffffffffff)
0x8000000000000000 (correct)
0x8000000000000001 (correct)
0x8000000000000002 (correct)
Huh!? O_o Am I stupid? What am I missing here? Or is this actually a bug? :-?
With 62 bits, everything is spot on:
0x3ffffffffffffffe
0x3fffffffffffffff
0x4000000000000000
0x4000000000000001
0x4000000000000002
And 64 bits rather unsurprisingly also yield:
0xfffffffffffffffe
0xffffffffffffffff
0x0
0x1
0x2
What do the Gopher Troopers think of the following? The Gopher protocol is a nearly-forgotten network protocol from the early 1990s, designed to serve and navigate text-based menus and documents over the Internet. While itĀs far less common than HTTP/HTTPS today, there are still some security risks associated with Gopher and Gopher space. LetĀs break them down carefully: 1. Lack of Encryption Problem: Gopher was designed long before widespread use of SSL/TLS. All dataĀincluding credentials, file transfers, and menu selectionsĀis transmitted in plaintext. Impact: Anyone intercepting traffic (e.g., via a network sniffer, public Wi-Fi, or a compromised router) can read sensitive information, including usernames and passwords. 2. No Authentication or Access Control Problem: Gopher servers rarely implement robust authentication; access control is usually limited or non-existent. Impact: Unauthorized users might browse sensitive directories or download private files, particularly if servers are misconfigured. 3. Server Software Vulnerabilities Problem: Modern OSes can still run legacy Gopher servers, but the software is often unmaintained. Impact: Old software may contain buffer overflows, directory traversal bugs, or command injection vulnerabilities that attackers could exploit. 4. Malicious Gopher Links Problem: Gopher menus can contain links that point to scripts or other servers, similar to hyperlinks in HTTP. A client following a malicious link could inadvertently: Download malware Access sensitive internal network resources (server-side request forgery) Impact: Could serve as a vector for attacks if a user opens content from untrusted sources. 5. Legacy Protocol Weaknesses Problem: Gopher lacks modern web security mechanisms like: Content security policies Same-origin policies Cross-site request forgery protection Impact: If Gopher is bridged to other services (like modern browsers via gateways), old vulnerabilities may be exposed. 6. Information Leakage Problem: Gopher servers often provide directory listings without restriction. Impact: Sensitive files, backup directories, and internal documents may be exposed unintentionally. 7. Bridging Risks Problem: Some modern browsers access Gopher via gateways (HTTP-to-Gopher proxies). These bridges may: Expose sensitive internal resources to the gateway Introduce logging or tracking that wouldnĀt exist on pure Gopher Impact: Attacks could occur indirectly through insecure intermediaries. Key Takeaways Gopher is inherently insecure due to its design in a pre-HTTPS era. Main threats: eavesdropping, unauthorized access, malware delivery, and exploitation of unpatched server software. Safe practice: Use Gopher only in isolated, trusted environments, or through secure HTTP(S) gateways with proper sanitization.
@rdlmda@rdlmda.me Oh boy, what a story! The infrastructure is indeed in need of overhaul. Iām glad you were so lucky in these circumstances.
(Btw. you posted the same message twice with just five seconds apart. Iām replying to the later one. Not sure if this is a client bug (like attempting to edit) or just operator error. ;-))
Hmm I think itās a bug in the Javascript. Itās meant to be 
@movq@www.uninformativ.de Luckily, Iāve never encountered any bugs in Vim with my type of work and features I use.
@bender@twtxt.net Thatās the plan! Once Iām happy with this v1 (and we find no other obvious bugs/issues) updating āChangesā with user-facing / human-freidnyl changes is part of the release process!
Heh I thought I fixed that bug? (is it s abug?!)
httpd now sends the Last-Modified with UTC instead of GMT. Current example:
@lyse@lyse.isobeef.org Bah. Yeah, that looks like a bug. Letās see if this already reported upstream. š¤
Hurray, I finally fixed another rendering bug in tt that was bugging me for a long time. Previously, when there were empty lines in a markdown multiline code block, the background color of the code block had not been used for the empty lines. So, this then looked as if there were actually several code blocks instead of a single one.
https://lyse.isobeef.org/tmp/tt-bugfix-empty-lines-in-multiline-code-blocks.png
I just fixed another bug in tt where the language hint in multiline markdown code blocks had not been stripped before rendering. It just looked like it was part of the actual code, which was ugly. I now throw it away. Actually, itās already extracted into the data model for possible future syntax highlighting.
@shinyoukai@neko.laidback.moe Because you might not want to commit all changed files in a single commit. I very often make use of this and create several commits. In fact, I like to git add --patch to interactively select which parts of a file go in the next commit. This happens most likely when refactoring during a feature implementation or bug fix. I couldnāt live without that anymore. :-)
If you have a much more organized way of working where this does not come up, you can just git commit --all to include all changed files in the next commit without git adding them first. But new files still have to be git added manually once.
@lyse@lyse.isobeef.org Iām toying with the idea of making a widget/window system on top of Pythonās ncurses. Iāve never really been happy with the existing ones (like urwid, textual, pytermgui, ā¦). I mean, theyāre not horrible, itās mostly the performance thatās bugging me ā I donāt want to wait an entire second for a terminal program to start up.
Not sure if Iāll actually see it through, though. Unicode makes this kind of thing extremely hard. š«¤
Whoo! I fixed one of the hardest bugs in mu (µ) I think Iāve had to figure out. Took me several days in fact to figure it out. The basic problem was, println(1, 2) was bring printed as 1 2 in the bytecode VM and 1 nil when natively compiled to machine code on macOS. In the end it turned out the machine code being generated / emitted meant that the list pointers for the rest... of the variadic arguments was being slot into a register that was being clobbered by the mu_retain and mu_release calls and effectively getting freed up on first use by the RC (reference counting) garbage collector š¤¦āāļø
I finished all 12 days of Advent of Code 2025! #AdventOfCode https://adventofcode.com ā did it in my own language, mu (Go/Python-ish, dynamic, int/bool/string, no floats/bitwise). Found a VM bug, fixed it, and the self-hosted mu compiler/VM (written in mu, host in Go) carried me through. š„³
Ooops, Iāve run into a bug or limitation with mu for Day 9 š¤
heās probably a fed, which explains the weird choices theyāre making nowadays that might implement bugs and backdoors in their OS
@aelaraji@aelaraji.com probably a bug on my end with the bridge. Iāll figure it out with your help when I get home from my holidays.
Fuck me, soooooooo beautiful! Awwww! :ā-) https://www.youtube.com/watch?v=oYfKgi133qo
This focuses more on the landscape part, other episodes also have amazing interactions with the locals. I cannot recommend the Itchy Boots channel enough. Itās in my top three channels of all time I believe. I hardly get the travel bug, but this has now changed. Watching Noralyās videos brings me great joy. It also shows humanity is not lost, contrary to what one might think in this crazy world. :-)
Caution, this channel gets very addictive!
@movq@www.uninformativ.de All good! š Likely bug on my end (bridge)
Better Technology, Worse Motivation: GenAIās Mediocrity Trap
While generative AI (GenAI) promises productive efficiency, it can paradoxically lead to lower-quality work. We conducted an experiment with professional illustrators and found that AI assistance flattens the quality curveāit accelerates initial gains but sharply diminishes the returns on sustained effort. Faced with this, a significant number of professionals made a strategic choice: they sacrificed the final quality to save time.
From http://www.jin-li.org/uploads/1/1/4/5/114595093/ai_and_motivation.pdf
I havenāt read this and canāt vouch for it; seems vaguely AI-boostery. Still, the conclusions are interesting. This seems to be the picture that is emerging about generative AI generally: most people donāt like it and find that degrades the quality of work. Coders seem to like it and think that it helps them, but in fact it makes the slower, less productive, and more bug prone.
By all measures itās a bad technology. We should just be honest about it. There is no need to make excuses for multi-trillion-dollar corporations.
And regarding those broken URLs: I once speculated that these bots operate on an old dataset, because I thought that my redirect rules actually were broken once and produced loops. But a) I cannot reproduce this today, and b) I cannot find anything related to that in my Git history, either. But itās hard to tell, because I switched operating systems and webservers since then ā¦
But the thing is that Iām seeing new URLs constructed in this pattern. So this canāt just be an old crawling dataset.
I am now wondering if those broken URLs are bot bugs as well.
They look like this (zalgo is a new project):
https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/
When you request that URL, you get redirected to /git/:
$ curl -sI https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/
HTTP/1.0 301 Moved Permanently
Date: Sat, 22 Nov 2025 06:13:51 GMT
Server: OpenBSD httpd
Connection: close
Content-Type: text/html
Content-Length: 510
Location: /git/
And on /git/, there are links to my repos. So if a broken client requests https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/, then sees a bunch of links and simply appends them, youāll end up with an infinite loop.
Is that whatās going on here or are my redirects actually still broken ⦠?
@bender@twtxt.net Itās good enough ti iron out any bugs š Can I haz an account? š
For those curious, the new Twtxt <-> ActivityPub bridge Iām building (bidirectional) simply requires three things:
- You register your Twtxt feed to the bridge: https://bridge.twtxt.net
- You verify that you in fact own/control the feed by putting the verification code somewhere on/in your feed (doesnāt matter where or how)
- You proxy/forward requests for
/.well-known/webfingerto the Bridgebridge.twtxt.net.
Iām still testing through and ironing out bugs š Please be patient! š
whoo fix a long stnading bug with identicons for feeds with no avatar in their metadata
Hint:
# nick = ...
# avatar = ...