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/8] 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 2facd6a5a..ac8b0fb74 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/8] 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 ac8b0fb74..05de63d60 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/8] 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 05de63d60..4a75d1f43 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", From 1febb5232e9f68350aa0b23e060bf38b0ab71224 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 07:45:21 +0000 Subject: [PATCH 4/8] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 52 ++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 4a75d1f43..1318958cb 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", @@ -27,8 +27,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "BLOCKED", - "last_status": 401, + "last_class": "OK", + "last_status": 200, "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": 4, + "consecutive_failures": 5, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -508,7 +508,7 @@ "first_failed": null, "first_seen": "2026-07-04", "last_class": "OK", - "last_status": 200, + "last_status": 204, "redirect_to": null }, "https|developer.mozilla.org|/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser|": { @@ -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=c11732dc99036deee51a90fcecb2" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c39e0b7af1e21d90fceeb1" }, "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", @@ -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-27", "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, @@ -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", From 694dec1322a3596fa6738a4a7d2c771ab83020c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 07:45:08 +0000 Subject: [PATCH 5/8] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 42 ++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 1318958cb..29e0907de 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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "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=c21429c39e0b7af1e21d90fceeb1" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c11335dc990a67eeeb1990fceeb6" }, "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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2512,12 +2512,12 @@ "redirect_to": null }, "https|www.flenker.blog|/hecto|": { - "consecutive_failures": 1, - "first_failed": "2026-07-27", + "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": 5, + "consecutive_failures": 6, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3324,8 +3324,8 @@ "first_failed": null, "first_seen": "2026-07-04", "last_class": "OK", - "last_status": 200, - "redirect_to": "https://javarevisited.blogspot.com/2015/06/how-to-create-http-server-in-java-serversocket-example.html" + "last_status": 204, + "redirect_to": null }, "http|javilop.com|/gamedev/tetris-tutorial-in-c-platform-independent-focused-in-game-logic-for-beginners|": { "consecutive_failures": 0, @@ -3424,7 +3424,7 @@ "redirect_to": null }, "http|sahatyalkabov.com|/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio|": { - "consecutive_failures": 5, + "consecutive_failures": 6, "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": 5, + "consecutive_failures": 6, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", From 91454fa91a8423a6f16be1470da3bd8271b7e0ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 07:04:20 +0000 Subject: [PATCH 6/8] chore(link-rot): update sweep state [skip ci] --- .github/link-rot-state.json | 50 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/link-rot-state.json b/.github/link-rot-state.json index 29e0907de..07baa3755 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": 6, + "consecutive_failures": 7, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -323,32 +323,32 @@ "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|codeburst.io|/build-a-simple-twitter-bot-with-node-js-in-just-38-lines-of-code-ed92db9eb078|": { "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|codeburst.io|/build-a-simple-twitter-bot-with-node-js-part-2-do-more-2ef1e039715d|": { "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|codeburst.io|/create-a-django-api-in-under-20-minutes-2a082a60f6f3|": { "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|codecrafters.io||": { @@ -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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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=c11335dc990a67eeeb1990fceeb6" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c3990a7af2e11590fce1" }, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "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": 6, + "consecutive_failures": 7, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3555,9 +3555,9 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "OK", - "last_status": 200, - "redirect_to": "https://exercism.org/" + "last_class": "BLOCKED", + "last_status": 403, + "redirect_to": null }, "http|www.goldsborough.me|/rust/web/tutorial/2018/01/20/17-01-11-writing_a_microservice_in_rust|": { "consecutive_failures": 0, From 66ec84b3d83389344176ee076d11b63907ec956f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 06:46:44 +0000 Subject: [PATCH 7/8] 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 07baa3755..d5c35af61 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": 7, + "consecutive_failures": 8, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -44,7 +44,7 @@ "first_failed": null, "first_seen": "2026-07-04", "last_class": "BLOCKED", - "last_status": null, + "last_status": 403, "redirect_to": null }, "https|bernhardwenzel.com|/articles/clojure-spellchecker|": { @@ -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": 7, + "consecutive_failures": 8, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "SUSPECT", @@ -508,7 +508,7 @@ "first_failed": null, "first_seen": "2026-07-04", "last_class": "OK", - "last_status": 204, + "last_status": 200, "redirect_to": null }, "https|developer.mozilla.org|/en-US/docs/Games/Tutorials/2D_breakout_game_Phaser|": { @@ -912,7 +912,7 @@ "redirect_to": null }, "https|hackclub.com|/workshops|": { - "consecutive_failures": 7, + "consecutive_failures": 8, "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": 7, + "consecutive_failures": 8, "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": 7, + "consecutive_failures": 8, "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=c21429c3990a7af2e11590fce1" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c11335dc9a026ceee41f90fceeb1" }, "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": 7, + "consecutive_failures": 8, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2363,8 +2363,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "OK", - "last_status": 200, + "last_class": "BLOCKED", + "last_status": null, "redirect_to": null }, "https|webdesign.tutsplus.com|/tutorials/build-a-simple-weather-app-with-vanilla-javascript--cms-33893|": { @@ -2403,7 +2403,7 @@ "consecutive_failures": 7, "first_failed": "2026-07-04", "first_seen": "2026-07-04", - "last_class": "HARD_DEAD", + "last_class": "BLOCKED", "last_status": null, "redirect_to": null }, @@ -2411,7 +2411,7 @@ "consecutive_failures": 7, "first_failed": "2026-07-04", "first_seen": "2026-07-04", - "last_class": "HARD_DEAD", + "last_class": "BLOCKED", "last_status": null, "redirect_to": null }, @@ -2419,7 +2419,7 @@ "consecutive_failures": 7, "first_failed": "2026-07-04", "first_seen": "2026-07-04", - "last_class": "HARD_DEAD", + "last_class": "BLOCKED", "last_status": null, "redirect_to": null }, @@ -2427,7 +2427,7 @@ "consecutive_failures": 7, "first_failed": "2026-07-04", "first_seen": "2026-07-04", - "last_class": "HARD_DEAD", + "last_class": "BLOCKED", "last_status": null, "redirect_to": null }, @@ -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": 7, + "consecutive_failures": 8, "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": 7, + "consecutive_failures": 8, "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": 7, + "consecutive_failures": 8, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", From c22f8183bc7f346bd660ca8680e75421029b9e41 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 07:38:48 +0000 Subject: [PATCH 8/8] 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 d5c35af61..1f38683f2 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": 8, + "consecutive_failures": 9, "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": 8, + "consecutive_failures": 9, "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": 8, + "consecutive_failures": 9, "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": 8, + "consecutive_failures": 9, "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": 8, + "consecutive_failures": 9, "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=c11335dc9a026ceee41f90fceeb1" + "redirect_to": "https://rsci.app.link/wWUO7TN8SS?_p=c21429c398007af2e11890f5ef" }, "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": 8, + "consecutive_failures": 9, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -2363,8 +2363,8 @@ "consecutive_failures": 0, "first_failed": null, "first_seen": "2026-07-04", - "last_class": "BLOCKED", - "last_status": null, + "last_class": "OK", + "last_status": 200, "redirect_to": null }, "https|webdesign.tutsplus.com|/tutorials/build-a-simple-weather-app-with-vanilla-javascript--cms-33893|": { @@ -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": 8, + "consecutive_failures": 9, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD", @@ -3324,8 +3324,8 @@ "first_failed": null, "first_seen": "2026-07-04", "last_class": "OK", - "last_status": 204, - "redirect_to": null + "last_status": 200, + "redirect_to": "https://javarevisited.blogspot.com/2015/06/how-to-create-http-server-in-java-serversocket-example.html" }, "http|javilop.com|/gamedev/tetris-tutorial-in-c-platform-independent-focused-in-game-logic-for-beginners|": { "consecutive_failures": 0, @@ -3424,7 +3424,7 @@ "redirect_to": null }, "http|sahatyalkabov.com|/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio|": { - "consecutive_failures": 8, + "consecutive_failures": 9, "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": 8, + "consecutive_failures": 9, "first_failed": "2026-07-04", "first_seen": "2026-07-04", "last_class": "HARD_DEAD",