From e4dd44b3b2b0218200904f7fb1a32300d260227e 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:21:25 +0000 Subject: [PATCH 1/3] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 2facd6a5..ac8b0fb7 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=c11732dc9a0166eee01f8ae3e9b4b3" }, "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", @@ -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 1b7d87e54d19e82eefbed2c4a7b0a02f3c09096f 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:06:11 +0000 Subject: [PATCH 2/3] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 46 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index ac8b0fb7..05de63d6 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=c11732dc9a0166eee01f8ae3e9b4b3" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c51629c391027af1e11590feed" }, "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": "OK", - "last_status": 202, + "last_class": "BLOCKED", + "last_status": 403, "redirect_to": null }, "https|www.cs.nmsu.edu|/~pfeiffer/fuse-tutorial|": { @@ -2512,12 +2512,12 @@ "redirect_to": null }, "https|www.flenker.blog|/hecto|": { - "consecutive_failures": 0, - "first_failed": null, + "consecutive_failures": 1, + "first_failed": "2026-07-13", "first_seen": "2026-07-04", - "last_class": "OK", - "last_status": 200, - "redirect_to": "https://philippflenker.com/hecto/" + "last_class": "HARD_DEAD", + "last_status": null, + "redirect_to": null }, "https|www.freecodecamp.org|/news/creating-apis-with-python-free-19-hour-course|": { "consecutive_failures": 0, @@ -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 3645dbc88b99e8b6a8443a34612a3e74dc502b6d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2026 07:41:24 +0000 Subject: [PATCH 3/3] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 46 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 05de63d6..4a75d1f4 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", @@ -27,8 +27,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "OK", - "last_status": 200, + "last_class": "BLOCKED", + "last_status": 401, "redirect_to": null }, "https|austinmorlan.com|/posts/chip8_emulator|": { @@ -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=c51629c391027af1e11590feed" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c11732dc99036deee51a90fcecb2" }, "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": "BLOCKED", - "last_status": 403, + "last_class": "OK", + "last_status": 202, "redirect_to": null }, "https|www.cs.nmsu.edu|/~pfeiffer/fuse-tutorial|": { @@ -2512,12 +2512,12 @@ "redirect_to": null }, "https|www.flenker.blog|/hecto|": { - "consecutive_failures": 1, - "first_failed": "2026-07-13", + "consecutive_failures": 0, + "first_failed": null, "first_seen": "2026-07-04", - "last_class": "HARD_DEAD", - "last_status": null, - "redirect_to": null + "last_class": "OK", + "last_status": 200, + "redirect_to": "https://philippflenker.com/hecto/" }, "https|www.freecodecamp.org|/news/creating-apis-with-python-free-19-hour-course|": { "consecutive_failures": 0, @@ -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",