Vol. I · No. 3crw-rw-rw- 1,3Price · 0 bytes · About
ForecastBright13 merges, 3 fixes

Dev Null News

The changelog nobody wrote

4 in brief ↓5 more stories ↓

Features

Related threads move in next door

Every commit page now ends with up to three posts from other threads that say the same thing. They arrive after the thread renders, so nothing waits on them.

Top storyTook the lead from Your feed stops drawing itself twice #1150. Every commit page now ends with up to three posts from other threads that match its meaning, and readers can star, report, or open one without searching. Held off 1 challenger since.

GitHub avatar of younes-io
younes-io, who filed the change, pictured in the contributor’s own avatar.

You open a thread, read it to the last reply, and keep going. Three commit cards sit below it, each from a different thread, each about the same thing you just read. Star one, report it, or press into it and you're in that conversation. A minute ago you would have had to think of a search.

Credit goes to younes-io, who taught commit pages to look sideways. Your commit's stored vector gets measured against every top-level post you are allowed to see, and anything within 0.60 cosine distance qualifies. The three closest win, closest first. No OpenAI call at read time. They picked the cutoff on 281 real posts, where pairs under 0.45 read like duplicates and past 0.60 stop making sense together. Pending, deleted, muted, and blocked posts stay out, and so does the thread you are in.

One catch. Only top-level posts are candidates, so a reply in another thread that says exactly what you said never appears. You meet it only if you open the thread it lives in. A fresh commit with no vector yet gets no rail at all.

In Brief

FeaturesTapping any link or button that leaves to sign in now sends an anonymous analytics event, and the per-device conversion table shows each device's taps and how many of them ended in a signup. #1217

InternalsUnit test discovery now globs the test directory and runs every component test through Vitest, so 8 tests that never executed now do. #1220

FixesCopying a code block from a folded commit preview now grabs the whole block, not just the first lines the excerpt shows. #1237

DocsContributing guidelines now forbid naming AI tools like Amp or Claude Code as commit co-authors or anywhere in commit attribution. #1241

3 routine merges sent to /dev/null

Performance

Your feed stops drawing itself twice

The browser now keeps the page the server sent instead of throwing it away and painting it again. Times finally follow your own clock, on every page.

Reload the feed and the page stays put. No blank frame, no second paint. What the server sent is what you keep. Timestamps read on your clock, 12-hour or 24-hour as your machine likes it, and hovering an author puts their local time beside yours when they have set one. The "3h" on a fresh commit no longer jumps the instant the page wakes up.

Credit jubianchi, who stopped the browser from discarding the server's HTML and rendering it all over again. Your browser leaves its time zone and its hour-cycle habit in two cookies, the server reads them back, and both sides format every date with the same clock. Relative times count from the moment the page was rendered and refresh on a 30-second tick. Tooltip bodies are built only when you point at one, and the graph's connecting lines come straight from the server's HTML until the canvas draws its own and hides the stand-ins in CSS.

In jubianchi's throttled-Chrome benchmark the feed builds 45 percent fewer DOM nodes, keeps 41 percent less JavaScript in memory and spends 16 percent less time on the main thread. Search results, reported commits and the image viewer now get real graphs too, each chain ending on a dot below the last card.

One catch. The server only learns your clock after you have visited once, and it only keeps the server's page while that answer still matches. A first visit, or a flight that changes your time zone, makes the browser throw the server's page away and render it afresh. The fast page is the next one.

Fixes

All 34 hearts, and no double takes

Search for a heart in the composer and the list now runs past eight to all 34. The reaction picker stops hiding matches and stops showing the same boat twice.

You type a heart in the composer and the suggestion list keeps going. Past the smiling cat with heart-eyes at number eight, past hearts you never knew had names, all the way to 34 rows, each with its shortcode in monospace and Enter ready to drop it in. You scroll, or you arrow down and keep going.

Credit goes to younes-io, who pulled the caps off and folded two searches into one. It keeps one row per emoji. The sailboat emoji answers to boat and sailboat but appears once. It then ranks shortcodes starting with your query above ones with a matching word, then ones that merely contain it. Within a tier, the reaction picker puts your most-used emoji first. Its search for "ar" now fills 253 cells where it used to stop at 200. Colons and capitals don't matter.

One catch. Spaces aren't turned into the joining character, so typing "yellow heart" in the reaction picker's search box gets you the "no emoji" message, even though yellow_heart is in the table. Type yellow_heart, or just yellow.

Fixes

Deleted partners stop haunting your inbox

Direct chats whose other person deleted their account no longer sit in your inbox pretending to be empty groups. They vanish from unread and request counts too, while real one-person groups stay put.

Open Remotes after someone you were chatting with deletes their account, and the row is simply gone. No more **Just you** entry that looks like a group, opens a 404, and refuses to leave. Your badge stops counting it as unread or as a waiting request.

Credit goes to xHeaven, who taught the inbox to check that a direct chat still has somebody on the other end before handing you a page of 30 conversations. The same check guards the unread and request tallies behind the nav badge, and an alert left over from a stale row now sends you to the remotes list instead of a dead chat. A real group you are the last member of still shows **Just you** and opens normally.

One catch. Nothing gets cleaned up. The old conversation record stays in the database, and this release only teaches the inbox, the counts and the alert links to ignore it.

Performance

Commit search now calls the neighbors first

Signed-in commit search now asks the vector index for the nearest commits before it checks blocks and mutes, instead of comparing your words against every embedding. The results come from the index, with a trade in exactness.

You type a few words into commit search while signed in, and the closest commits come back as the same cards you know. They still show author, replies, and stars. Nothing new appears on screen. The change is in the trip the query takes before those cards reach you.

Credit goes to mnapoli, who split the lookup in two. The search first asks the vector index for the nearest commits, twice as many as you requested, so 40 for the usual page of 20, limited to approved commits and your own. Only then does it drop muted authors and people across a block, order the survivors, and keep your page. Before, those checks rode along with the closest-first sort and the database decided it was cheaper to compare your words with every 1,536-dimension embedding on disk. The index is approximate, so a result can occasionally be a slightly less close match.

There is one catch. The head start is fixed at twice the page size. If more than half of those nearest 40 belong to people you muted or blocked, the search has nothing left to backfill with and hands you a shorter list. Guests never see it. It is the signed-in reader with a crowded mute list who can.

Performance

Unread badge skips the full-table scan

The number on Notifications now answers in 0.2 milliseconds on an account holding 12,000 notifications, down from 33. Same count, same dot, faster lookup.

Leave /dev/null open in a tab and the Notifications badge keeps itself current, asking the server once every 30 seconds. This week the answer comes back quicker. On an account holding 12,000 notifications, the check behind the badge fell from 33 milliseconds to 0.2. You will not see a new pixel. The same count arrives, just sooner.

Credit goes to mnapoli, who taught the relevance check to look things up instead of hashing them. That check asks three questions of every notification. It asks whether the follow still holds, whether the commit behind a reply, quote, mention or star is approved, and whether an approval or rejection notice matches its commit's status. Each question now carries an empty offset, which keeps the database answering it one notification at a time from an index rather than building a hash over every follow and every commit. Grouping 2,000 notifications also dropped, from 64 milliseconds to 25.

One catch. This speeds up the looking-up, not the grouping. The unread count still groups everything from your oldest unread notification forward, so a mailbox with an ancient unread item still pays for the history behind it. That cost is 135 milliseconds at 12,000 notifications, against 25 at 2,000. Nothing new appears in the inbox, either. There are no new notification types and no new controls.

Who Filed

  1. mnapoli4
  2. nunomaduro3
  3. younes-io2
  4. xHeaven2
  5. jubianchi1
  6. hbenabdallah1

Merge Market

SectorVolLines
Performance3+1,458
Fixes3+230
Chores3+65
Features2+778
Internals1+68
Docs1+7

Back Issues