From 8e05798a6fe3802087002200edabcf33119dea38 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 11:20:45 +0000 Subject: [PATCH 1/4] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 2facd6a5a..53841abed 100644 --- a/.github/link-rot-state.json +++ b/.github/link-rot-state.json @@ -16,7 +16,7 @@ "redirect_to": null }, "https|arjunsreedharan.org|/post/148675821737/memory-allocators-101-write-a-simple-memory|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -416,7 +416,7 @@ "redirect_to": "https://codepr.github.io/posts/sol-mqtt-broker/" }, "https|codequs.com|/p/S14jQ5UyG/build-a-distributed-streaming-system-with-apache-kafka-and-python|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -912,7 +912,7 @@ "redirect_to": null }, "https|hackclub.com|/workshops|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -984,7 +984,7 @@ "redirect_to": null }, "https|hackhands.com|/building-instagram-clone-angularjs-satellizer-nodejs-mongodb|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -1104,7 +1104,7 @@ "redirect_to": null }, "https|jguegant.github.io|//jguegant.github.io/blogs/tech/meta-crush-saga.html|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -1261,7 +1261,7 @@ "first_seen": "2026-07-04", "last_class": "OK", "last_status": 200, - "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c39e037af5ea038cffed" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c39e0a7af1e31490ffecb7" }, "https|linoscope.github.io|/writing-a-game-boy-emulator-in-ocaml|": { "consecutive_failures": 0, @@ -2088,7 +2088,7 @@ "redirect_to": null }, "https|thinkster.io|/django-angularjs-tutorial|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2400,7 +2400,7 @@ "redirect_to": "https://aosabook.org/en/500L/a-python-interpreter-written-in-python.html" }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app-part-2|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2408,7 +2408,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2416,7 +2416,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead-part-2|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2424,7 +2424,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2435,8 +2435,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "OK", - "last_status": 202, + "last_class": "BLOCKED", + "last_status": 403, "redirect_to": null }, "https|www.cs.nmsu.edu|/~pfeiffer/fuse-tutorial|": { @@ -3256,7 +3256,7 @@ "redirect_to": "https://www.adit.io/posts/2013-04-15-making-a-website-with-haskell.html" }, "http|arjunsreedharan.org|/post/82710718100/kernel-101-lets-write-a-kernel|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3424,7 +3424,7 @@ "redirect_to": null }, "http|sahatyalkabov.com|/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio|": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3456,7 +3456,7 @@ "redirect_to": "https://shiny.posit.co/r/getstarted/" }, "http|thinkster.io||": { - "consecutive_failures": 1, + "consecutive_failures": 2, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", From ac9186b015713c2ba695d31d70ec71a9a83be34f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Jul 2026 10:05:42 +0000 Subject: [PATCH 2/4] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 53841abed..c0dcd0fd2 100644 --- a/.github/link-rot-state.json +++ b/.github/link-rot-state.json @@ -16,7 +16,7 @@ "redirect_to": null }, "https|arjunsreedharan.org|/post/148675821737/memory-allocators-101-write-a-simple-memory|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -416,7 +416,7 @@ "redirect_to": "https://codepr.github.io/posts/sol-mqtt-broker/" }, "https|codequs.com|/p/S14jQ5UyG/build-a-distributed-streaming-system-with-apache-kafka-and-python|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -912,7 +912,7 @@ "redirect_to": null }, "https|hackclub.com|/workshops|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -984,7 +984,7 @@ "redirect_to": null }, "https|hackhands.com|/building-instagram-clone-angularjs-satellizer-nodejs-mongodb|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -1104,7 +1104,7 @@ "redirect_to": null }, "https|jguegant.github.io|//jguegant.github.io/blogs/tech/meta-crush-saga.html|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -1261,7 +1261,7 @@ "first_seen": "2026-07-04", "last_class": "OK", "last_status": 200, - "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c39e0a7af1e31490ffecb7" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c49a1c66f0e5038cf9e8" }, "https|linoscope.github.io|/writing-a-game-boy-emulator-in-ocaml|": { "consecutive_failures": 0, @@ -2088,7 +2088,7 @@ "redirect_to": null }, "https|thinkster.io|/django-angularjs-tutorial|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2400,7 +2400,7 @@ "redirect_to": "https://aosabook.org/en/500L/a-python-interpreter-written-in-python.html" }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app-part-2|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2408,7 +2408,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2416,7 +2416,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead-part-2|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2424,7 +2424,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2435,8 +2435,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "BLOCKED", - "last_status": 403, + "last_class": "OK", + "last_status": 202, "redirect_to": null }, "https|www.cs.nmsu.edu|/~pfeiffer/fuse-tutorial|": { @@ -2867,8 +2867,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "OK", - "last_status": 200, + "last_class": "BLOCKED", + "last_status": 403, "redirect_to": null }, "https|www.swift.org|/getting-started/swiftui|": { @@ -3256,7 +3256,7 @@ "redirect_to": "https://www.adit.io/posts/2013-04-15-making-a-website-with-haskell.html" }, "http|arjunsreedharan.org|/post/82710718100/kernel-101-lets-write-a-kernel|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3424,7 +3424,7 @@ "redirect_to": null }, "http|sahatyalkabov.com|/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio|": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3456,7 +3456,7 @@ "redirect_to": "https://shiny.posit.co/r/getstarted/" }, "http|thinkster.io||": { - "consecutive_failures": 2, + "consecutive_failures": 3, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", From 21c6d9f24e465fc7d3195e28e962cbf8253d8b2a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 09:51:32 +0000 Subject: [PATCH 3/4] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index c0dcd0fd2..394a262d4 100644 --- a/.github/link-rot-state.json +++ b/.github/link-rot-state.json @@ -16,7 +16,7 @@ "redirect_to": null }, "https|arjunsreedharan.org|/post/148675821737/memory-allocators-101-write-a-simple-memory|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -416,7 +416,7 @@ "redirect_to": "https://codepr.github.io/posts/sol-mqtt-broker/" }, "https|codequs.com|/p/S14jQ5UyG/build-a-distributed-streaming-system-with-apache-kafka-and-python|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -912,7 +912,7 @@ "redirect_to": null }, "https|hackclub.com|/workshops|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -984,7 +984,7 @@ "redirect_to": null }, "https|hackhands.com|/building-instagram-clone-angularjs-satellizer-nodejs-mongodb|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -1104,7 +1104,7 @@ "redirect_to": null }, "https|jguegant.github.io|//jguegant.github.io/blogs/tech/meta-crush-saga.html|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -1261,7 +1261,7 @@ "first_seen": "2026-07-04", "last_class": "OK", "last_status": 200, - "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c49a1c66f0e5038cf9e8" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c40a36c79d1c62f3fc1c89f5" }, "https|linoscope.github.io|/writing-a-game-boy-emulator-in-ocaml|": { "consecutive_failures": 0, @@ -2088,7 +2088,7 @@ "redirect_to": null }, "https|thinkster.io|/django-angularjs-tutorial|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2400,7 +2400,7 @@ "redirect_to": "https://aosabook.org/en/500L/a-python-interpreter-written-in-python.html" }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app-part-2|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2408,7 +2408,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2416,7 +2416,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead-part-2|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2424,7 +2424,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2435,8 +2435,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "OK", - "last_status": 202, + "last_class": "BLOCKED", + "last_status": 403, "redirect_to": null }, "https|www.cs.nmsu.edu|/~pfeiffer/fuse-tutorial|": { @@ -3256,7 +3256,7 @@ "redirect_to": "https://www.adit.io/posts/2013-04-15-making-a-website-with-haskell.html" }, "http|arjunsreedharan.org|/post/82710718100/kernel-101-lets-write-a-kernel|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3424,7 +3424,7 @@ "redirect_to": null }, "http|sahatyalkabov.com|/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio|": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3456,7 +3456,7 @@ "redirect_to": "https://shiny.posit.co/r/getstarted/" }, "http|thinkster.io||": { - "consecutive_failures": 3, + "consecutive_failures": 4, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", From 3307e458cdaaa82a811e415cf9f1bbaefadb192c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 10:26:49 +0000 Subject: [PATCH 4/4] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 394a262d4..4ce4bfa20 100644 --- a/.github/link-rot-state.json +++ b/.github/link-rot-state.json @@ -16,7 +16,7 @@ "redirect_to": null }, "https|arjunsreedharan.org|/post/148675821737/memory-allocators-101-write-a-simple-memory|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -416,7 +416,7 @@ "redirect_to": "https://codepr.github.io/posts/sol-mqtt-broker/" }, "https|codequs.com|/p/S14jQ5UyG/build-a-distributed-streaming-system-with-apache-kafka-and-python|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -912,7 +912,7 @@ "redirect_to": null }, "https|hackclub.com|/workshops|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -984,7 +984,7 @@ "redirect_to": null }, "https|hackhands.com|/building-instagram-clone-angularjs-satellizer-nodejs-mongodb|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -1104,7 +1104,7 @@ "redirect_to": null }, "https|jguegant.github.io|//jguegant.github.io/blogs/tech/meta-crush-saga.html|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -1261,7 +1261,7 @@ "first_seen": "2026-07-04", "last_class": "OK", "last_status": 200, - "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c40a36c79d1c62f3fc1c89f5" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c11335dc990a66eee01c8ce3eb" }, "https|linoscope.github.io|/writing-a-game-boy-emulator-in-ocaml|": { "consecutive_failures": 0, @@ -2088,7 +2088,7 @@ "redirect_to": null }, "https|thinkster.io|/django-angularjs-tutorial|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2099,8 +2099,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "BLOCKED", - "last_status": 403, + "last_class": "OK", + "last_status": 200, "redirect_to": null }, "https|towardsdatascience.com|/ai-generates-taylor-swifts-song-lyrics-6fd92a03ef7e|": { @@ -2400,7 +2400,7 @@ "redirect_to": "https://aosabook.org/en/500L/a-python-interpreter-written-in-python.html" }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app-part-2|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2408,7 +2408,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/how-to-build-your-own-uber-for-x-app|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2416,7 +2416,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead-part-2|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2424,7 +2424,7 @@ "redirect_to": null }, "https|www.ashwinhariharan.tech|/blog/thinking-of-building-a-contact-tracing-application-heres-what-you-can-do-instead|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3256,7 +3256,7 @@ "redirect_to": "https://www.adit.io/posts/2013-04-15-making-a-website-with-haskell.html" }, "http|arjunsreedharan.org|/post/82710718100/kernel-101-lets-write-a-kernel|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3424,7 +3424,7 @@ "redirect_to": null }, "http|sahatyalkabov.com|/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio|": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3456,7 +3456,7 @@ "redirect_to": "https://shiny.posit.co/r/getstarted/" }, "http|thinkster.io||": { - "consecutive_failures": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD",