diff --git a/02/doge-and-elon/index.html b/02/doge-and-elon/index.html index 0c2267b..cd37d05 100644 --- a/02/doge-and-elon/index.html +++ b/02/doge-and-elon/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/02/executive-orders/index.html b/02/executive-orders/index.html index 4248fe4..4eb2018 100644 --- a/02/executive-orders/index.html +++ b/02/executive-orders/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/02/index.html b/02/index.html index 17ed2e7..a27dc6e 100644 --- a/02/index.html +++ b/02/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/02/ukrainian-update/index.html b/02/ukrainian-update/index.html index 075c7d4..9293794 100644 --- a/02/ukrainian-update/index.html +++ b/02/ukrainian-update/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/a-student-for-speech/index.html b/03/a-student-for-speech/index.html index 971d16e..97ba471 100644 --- a/03/a-student-for-speech/index.html +++ b/03/a-student-for-speech/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/boycotting-protesting-or-crime/index.html b/03/boycotting-protesting-or-crime/index.html index ef82a6f..ad5c125 100644 --- a/03/boycotting-protesting-or-crime/index.html +++ b/03/boycotting-protesting-or-crime/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/effective-outreach/index.html b/03/effective-outreach/index.html index 9e986a1..ab97755 100644 --- a/03/effective-outreach/index.html +++ b/03/effective-outreach/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/executive-orders/index.html b/03/executive-orders/index.html index 8b21e8a..937ca57 100644 --- a/03/executive-orders/index.html +++ b/03/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/index.html b/03/index.html index 2dad27a..cc209f6 100644 --- a/03/index.html +++ b/03/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/schumer-folds/index.html b/03/schumer-folds/index.html index 9d8a8d4..ad4de03 100644 --- a/03/schumer-folds/index.html +++ b/03/schumer-folds/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/ukraine-russia-update/index.html b/03/ukraine-russia-update/index.html index b26f9b9..e815b05 100644 --- a/03/ukraine-russia-update/index.html +++ b/03/ukraine-russia-update/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/03/when-transparency-becomes-opaque/index.html b/03/when-transparency-becomes-opaque/index.html index e6c2ebf..5e17cf5 100644 --- a/03/when-transparency-becomes-opaque/index.html +++ b/03/when-transparency-becomes-opaque/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/04/ceasefire-in-name-only/index.html b/04/ceasefire-in-name-only/index.html index 4137e4b..725732e 100644 --- a/04/ceasefire-in-name-only/index.html +++ b/04/ceasefire-in-name-only/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/04/djt-flubs-israel-palestine/index.html b/04/djt-flubs-israel-palestine/index.html index 37c0bb6..ff875b4 100644 --- a/04/djt-flubs-israel-palestine/index.html +++ b/04/djt-flubs-israel-palestine/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/04/elons-war-on-the-courts/index.html b/04/elons-war-on-the-courts/index.html index 5685c91..f0b7b32 100644 --- a/04/elons-war-on-the-courts/index.html +++ b/04/elons-war-on-the-courts/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/04/executive-orders/index.html b/04/executive-orders/index.html index 3b6f7a2..815d39d 100644 --- a/04/executive-orders/index.html +++ b/04/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/04/index.html b/04/index.html index 4494d67..88961cd 100644 --- a/04/index.html +++ b/04/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/04/just-show-up/index.html b/04/just-show-up/index.html index 2983ef6..83b69f8 100644 --- a/04/just-show-up/index.html +++ b/04/just-show-up/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/05/executive-orders/index.html b/05/executive-orders/index.html index 2dc7f19..fa81ad1 100644 --- a/05/executive-orders/index.html +++ b/05/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/05/fail-too-big-to-save/index.html b/05/fail-too-big-to-save/index.html index 1003125..587a63e 100644 --- a/05/fail-too-big-to-save/index.html +++ b/05/fail-too-big-to-save/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/05/index.html b/05/index.html index db971f3..82c0adc 100644 --- a/05/index.html +++ b/05/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/05/signal-chat-fiasco/index.html b/05/signal-chat-fiasco/index.html index 4a17e8b..f7e65a2 100644 --- a/05/signal-chat-fiasco/index.html +++ b/05/signal-chat-fiasco/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/05/tros-contempt-last-stand-of-judiciary/index.html b/05/tros-contempt-last-stand-of-judiciary/index.html index eee23c3..7cbf49b 100644 --- a/05/tros-contempt-last-stand-of-judiciary/index.html +++ b/05/tros-contempt-last-stand-of-judiciary/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/05/ukraine-russia/index.html b/05/ukraine-russia/index.html index 1aef543..3de65be 100644 --- a/05/ukraine-russia/index.html +++ b/05/ukraine-russia/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/05/weighted-dice/index.html b/05/weighted-dice/index.html index ab81936..cbc1cd4 100644 --- a/05/weighted-dice/index.html +++ b/05/weighted-dice/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/destinys-dissent/index.html b/06/destinys-dissent/index.html index c956b2c..f24d874 100644 --- a/06/destinys-dissent/index.html +++ b/06/destinys-dissent/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/executive-orders/index.html b/06/executive-orders/index.html index ea945e8..155ab94 100644 --- a/06/executive-orders/index.html +++ b/06/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/index.html b/06/index.html index 4a5cd68..778de67 100644 --- a/06/index.html +++ b/06/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/06/musks-exit-wound/index.html b/06/musks-exit-wound/index.html index 5bf93ca..a0d8963 100644 --- a/06/musks-exit-wound/index.html +++ b/06/musks-exit-wound/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/opinion-piece-ukraine/index.html b/06/opinion-piece-ukraine/index.html index d99a950..9cfd1ee 100644 --- a/06/opinion-piece-ukraine/index.html +++ b/06/opinion-piece-ukraine/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/russia-builds-and-the-us-wavers/index.html b/06/russia-builds-and-the-us-wavers/index.html index d16336d..853f263 100644 --- a/06/russia-builds-and-the-us-wavers/index.html +++ b/06/russia-builds-and-the-us-wavers/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/special-elections/index.html b/06/special-elections/index.html index 0f5f898..a0265fa 100644 --- a/06/special-elections/index.html +++ b/06/special-elections/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/trumps-tariffs-cause-stocks-to-tumble/index.html b/06/trumps-tariffs-cause-stocks-to-tumble/index.html index 8bb120e..7ce0f4b 100644 --- a/06/trumps-tariffs-cause-stocks-to-tumble/index.html +++ b/06/trumps-tariffs-cause-stocks-to-tumble/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/06/when-beat-the-drums-of-war/index.html b/06/when-beat-the-drums-of-war/index.html index 0c7ab29..5ca4a4c 100644 --- a/06/when-beat-the-drums-of-war/index.html +++ b/06/when-beat-the-drums-of-war/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/07/build-walls-burn-bridges/index.html b/07/build-walls-burn-bridges/index.html index 75830d6..0ae18f6 100644 --- a/07/build-walls-burn-bridges/index.html +++ b/07/build-walls-burn-bridges/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/07/executive-orders/index.html b/07/executive-orders/index.html index 458352a..0064e7d 100644 --- a/07/executive-orders/index.html +++ b/07/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/07/index.html b/07/index.html index b0001c6..bdd8136 100644 --- a/07/index.html +++ b/07/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/07/israel-palestine/index.html b/07/israel-palestine/index.html index ab8bde3..c4fd315 100644 --- a/07/israel-palestine/index.html +++ b/07/israel-palestine/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/07/little-effort-big-impact/index.html b/07/little-effort-big-impact/index.html index 44ca7dc..8a89377 100644 --- a/07/little-effort-big-impact/index.html +++ b/07/little-effort-big-impact/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/07/powerlessness-corrupts/index.html b/07/powerlessness-corrupts/index.html index 2f58cd6..1d70140 100644 --- a/07/powerlessness-corrupts/index.html +++ b/07/powerlessness-corrupts/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/07/russia-ukraine/index.html b/07/russia-ukraine/index.html index ff6f830..59f5f61 100644 --- a/07/russia-ukraine/index.html +++ b/07/russia-ukraine/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/07/trust-us-were-the-government/index.html b/07/trust-us-were-the-government/index.html index 5a9d449..a0f6591 100644 --- a/07/trust-us-were-the-government/index.html +++ b/07/trust-us-were-the-government/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/08/concepts-of-a-plan/index.html b/08/concepts-of-a-plan/index.html index 057012a..520e300 100644 --- a/08/concepts-of-a-plan/index.html +++ b/08/concepts-of-a-plan/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/08/efficiency-but-make-it-eugenics/index.html b/08/efficiency-but-make-it-eugenics/index.html index ac93df0..73708b8 100644 --- a/08/efficiency-but-make-it-eugenics/index.html +++ b/08/efficiency-but-make-it-eugenics/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/08/executive-orders/index.html b/08/executive-orders/index.html index 3ef8caa..85a651c 100644 --- a/08/executive-orders/index.html +++ b/08/executive-orders/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/08/index.html b/08/index.html index e5541e9..7388c54 100644 --- a/08/index.html +++ b/08/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/08/is-war-next-for-israel-and-iran/index.html b/08/is-war-next-for-israel-and-iran/index.html index e52de90..d6c4259 100644 --- a/08/is-war-next-for-israel-and-iran/index.html +++ b/08/is-war-next-for-israel-and-iran/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/08/money-in-politics-101/index.html b/08/money-in-politics-101/index.html index bd983cd..7e96597 100644 --- a/08/money-in-politics-101/index.html +++ b/08/money-in-politics-101/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/08/uncanceled-the-return-of-disgraced-democrats/index.html b/08/uncanceled-the-return-of-disgraced-democrats/index.html index 19b0142..483dc58 100644 --- a/08/uncanceled-the-return-of-disgraced-democrats/index.html +++ b/08/uncanceled-the-return-of-disgraced-democrats/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/08/zeitenwende-and-germanys-role-in-european-defense/index.html b/08/zeitenwende-and-germanys-role-in-european-defense/index.html index 4176613..9c6e50b 100644 --- a/08/zeitenwende-and-germanys-role-in-european-defense/index.html +++ b/08/zeitenwende-and-germanys-role-in-european-defense/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/09/chainsaws-arent-office-tools/index.html b/09/chainsaws-arent-office-tools/index.html index e75da82..e65b260 100644 --- a/09/chainsaws-arent-office-tools/index.html +++ b/09/chainsaws-arent-office-tools/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/09/coalition-of-the-willing/index.html b/09/coalition-of-the-willing/index.html index 8cc1792..75e0ba2 100644 --- a/09/coalition-of-the-willing/index.html +++ b/09/coalition-of-the-willing/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/09/executive-orders/index.html b/09/executive-orders/index.html index 3cb5164..ba01064 100644 --- a/09/executive-orders/index.html +++ b/09/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/09/from-ceasefires-to-car-bombs/index.html b/09/from-ceasefires-to-car-bombs/index.html index a442223..05b76ea 100644 --- a/09/from-ceasefires-to-car-bombs/index.html +++ b/09/from-ceasefires-to-car-bombs/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/09/index.html b/09/index.html index 107b87a..514a4d0 100644 --- a/09/index.html +++ b/09/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/09/judge-detained/index.html b/09/judge-detained/index.html index fcd7b71..4161e36 100644 --- a/09/judge-detained/index.html +++ b/09/judge-detained/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/09/maga-election-attacks/index.html b/09/maga-election-attacks/index.html index 3d3365b..17b1d51 100644 --- a/09/maga-election-attacks/index.html +++ b/09/maga-election-attacks/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/09/they-make-a-desert/index.html b/09/they-make-a-desert/index.html index 8bfba69..7be6236 100644 --- a/09/they-make-a-desert/index.html +++ b/09/they-make-a-desert/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/100-days/index.html b/10/100-days/index.html index 57b1c77..52adff5 100644 --- a/10/100-days/index.html +++ b/10/100-days/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/brief-history/index.html b/10/brief-history/index.html index 3925806..73e8416 100644 --- a/10/brief-history/index.html +++ b/10/brief-history/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/doge-insider-threat/index.html b/10/doge-insider-threat/index.html index 2c0dffd..f59958e 100644 --- a/10/doge-insider-threat/index.html +++ b/10/doge-insider-threat/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/europe-braces-for-impact/index.html b/10/europe-braces-for-impact/index.html index e5df97e..0e4929a 100644 --- a/10/europe-braces-for-impact/index.html +++ b/10/europe-braces-for-impact/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/executive-orders/index.html b/10/executive-orders/index.html index 4e7085b..75c36e2 100644 --- a/10/executive-orders/index.html +++ b/10/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/index.html b/10/index.html index 26206ba..eabab10 100644 --- a/10/index.html +++ b/10/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/10/minerals-deal-signed/index.html b/10/minerals-deal-signed/index.html index fad7867..9a8b2a5 100644 --- a/10/minerals-deal-signed/index.html +++ b/10/minerals-deal-signed/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/no-data-left-behind/index.html b/10/no-data-left-behind/index.html index 52deb0f..28a0481 100644 --- a/10/no-data-left-behind/index.html +++ b/10/no-data-left-behind/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/10/rain-of-fire/index.html b/10/rain-of-fire/index.html index d77ff0c..3b3c2d8 100644 --- a/10/rain-of-fire/index.html +++ b/10/rain-of-fire/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/11/constructing-crisis/index.html b/11/constructing-crisis/index.html index 17782f5..7fc7ce6 100644 --- a/11/constructing-crisis/index.html +++ b/11/constructing-crisis/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/11/destinys-dissent/index.html b/11/destinys-dissent/index.html index 51d318a..dad045c 100644 --- a/11/destinys-dissent/index.html +++ b/11/destinys-dissent/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/11/eu-strikes-back/index.html b/11/eu-strikes-back/index.html index 12dde7a..d98829f 100644 --- a/11/eu-strikes-back/index.html +++ b/11/eu-strikes-back/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/11/executive-orders/index.html b/11/executive-orders/index.html index 90b1a43..0a85ee4 100644 --- a/11/executive-orders/index.html +++ b/11/executive-orders/index.html @@ -18,6 +18,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/11/gazas-protests-fight-to-be-heard/index.html b/11/gazas-protests-fight-to-be-heard/index.html index 782832c..5a8b5ec 100644 --- a/11/gazas-protests-fight-to-be-heard/index.html +++ b/11/gazas-protests-fight-to-be-heard/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/11/in-memory-of-leon-greenman/index.html b/11/in-memory-of-leon-greenman/index.html index d5ffe61..753f0eb 100644 --- a/11/in-memory-of-leon-greenman/index.html +++ b/11/in-memory-of-leon-greenman/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/11/index.html b/11/index.html index 930460c..c3ba504 100644 --- a/11/index.html +++ b/11/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/11/unity-parades-moscow-pressure-kyiv/index.html b/11/unity-parades-moscow-pressure-kyiv/index.html index cfd0edc..9bc9f38 100644 --- a/11/unity-parades-moscow-pressure-kyiv/index.html +++ b/11/unity-parades-moscow-pressure-kyiv/index.html @@ -17,6 +17,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + + diff --git a/12/bridging-the-channel/index.html b/12/bridging-the-channel/index.html index 88f3354..67e3ac9 100644 --- a/12/bridging-the-channel/index.html +++ b/12/bridging-the-channel/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/12/checks-in-the-mail/index.html b/12/checks-in-the-mail/index.html index b91ed40..83fb551 100644 --- a/12/checks-in-the-mail/index.html +++ b/12/checks-in-the-mail/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/12/deadlock/index.html b/12/deadlock/index.html index 5faa39a..6c1ecee 100644 --- a/12/deadlock/index.html +++ b/12/deadlock/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/12/displacement/index.html b/12/displacement/index.html index cee9657..d6c316e 100644 --- a/12/displacement/index.html +++ b/12/displacement/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/12/eos/index.html b/12/eos/index.html index a10df21..9c74533 100644 --- a/12/eos/index.html +++ b/12/eos/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/12/index.html b/12/index.html index 740ca17..a1e3ccc 100644 --- a/12/index.html +++ b/12/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/12/road-to-brexit/index.html b/12/road-to-brexit/index.html index 59900ec..e11fb88 100644 --- a/12/road-to-brexit/index.html +++ b/12/road-to-brexit/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/12/super-sunday/index.html b/12/super-sunday/index.html index 77402d3..7e896cb 100644 --- a/12/super-sunday/index.html +++ b/12/super-sunday/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/12/the-path-to-impeachment/index.html b/12/the-path-to-impeachment/index.html index d066802..f36881f 100644 --- a/12/the-path-to-impeachment/index.html +++ b/12/the-path-to-impeachment/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/big-beautiful-trap/index.html b/13/big-beautiful-trap/index.html index c0f8159..5c10bf6 100644 --- a/13/big-beautiful-trap/index.html +++ b/13/big-beautiful-trap/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/eos/index.html b/13/eos/index.html index 23da4e4..af2eb83 100644 --- a/13/eos/index.html +++ b/13/eos/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/fool-me-once/index.html b/13/fool-me-once/index.html index 006eabb..7e4d5d3 100644 --- a/13/fool-me-once/index.html +++ b/13/fool-me-once/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/gideons-chariots/index.html b/13/gideons-chariots/index.html index d7ab6b4..3b28623 100644 --- a/13/gideons-chariots/index.html +++ b/13/gideons-chariots/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/index.html b/13/index.html index f5d95cf..35df786 100644 --- a/13/index.html +++ b/13/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/13/over-night-attacks/index.html b/13/over-night-attacks/index.html index 274237f..24db6e1 100644 --- a/13/over-night-attacks/index.html +++ b/13/over-night-attacks/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/slam-the-brakes/index.html b/13/slam-the-brakes/index.html index 7b91d89..b7d8b81 100644 --- a/13/slam-the-brakes/index.html +++ b/13/slam-the-brakes/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/storm/index.html b/13/storm/index.html index db44eff..eb8e288 100644 --- a/13/storm/index.html +++ b/13/storm/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/13/systemic-orthodoxy/index.html b/13/systemic-orthodoxy/index.html index 9d1d423..def21ca 100644 --- a/13/systemic-orthodoxy/index.html +++ b/13/systemic-orthodoxy/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/Argentina/index.html b/14/Argentina/index.html index ad3e445..1f39f45 100644 --- a/14/Argentina/index.html +++ b/14/Argentina/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/FAMINE/index.html b/14/FAMINE/index.html index 457ea02..3779d5f 100644 --- a/14/FAMINE/index.html +++ b/14/FAMINE/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/Illusion/index.html b/14/Illusion/index.html index 162d50c..306e1a0 100644 --- a/14/Illusion/index.html +++ b/14/Illusion/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/Pathfinder/index.html b/14/Pathfinder/index.html index a471797..b4a6150 100644 --- a/14/Pathfinder/index.html +++ b/14/Pathfinder/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/battle/index.html b/14/battle/index.html index 7701d06..69eb34f 100644 --- a/14/battle/index.html +++ b/14/battle/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/eos/index.html b/14/eos/index.html index d09b186..d00804c 100644 --- a/14/eos/index.html +++ b/14/eos/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/index.html b/14/index.html index ddfb669..18282dc 100644 --- a/14/index.html +++ b/14/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/14/instanbul/index.html b/14/instanbul/index.html index 33b178c..df2e1a9 100644 --- a/14/instanbul/index.html +++ b/14/instanbul/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/revolt/index.html b/14/revolt/index.html index d40a79d..94f75eb 100644 --- a/14/revolt/index.html +++ b/14/revolt/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/14/ruff_considerations/index.html b/14/ruff_considerations/index.html index 3877e34..b6b1640 100644 --- a/14/ruff_considerations/index.html +++ b/14/ruff_considerations/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/15/index.html b/15/index.html index 28b8595..f752e90 100644 --- a/15/index.html +++ b/15/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/16/eos/index.html b/16/eos/index.html index 0d9ee9d..a7ac8c4 100644 --- a/16/eos/index.html +++ b/16/eos/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/16/index.html b/16/index.html index 15c6d0a..74c4e7d 100644 --- a/16/index.html +++ b/16/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/16/korea/index.html b/16/korea/index.html index 8a3e49b..b60004d 100644 --- a/16/korea/index.html +++ b/16/korea/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/16/poland/index.html b/16/poland/index.html index 1329bfd..cf64fe9 100644 --- a/16/poland/index.html +++ b/16/poland/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/16/rfk/index.html b/16/rfk/index.html index 5c0f89c..1daa4a1 100644 --- a/16/rfk/index.html +++ b/16/rfk/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/16/ukraine/index.html b/16/ukraine/index.html index f08b5b1..4f96e4c 100644 --- a/16/ukraine/index.html +++ b/16/ukraine/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/17/1iran/index.html b/17/1iran/index.html index d7d2518..c6f6404 100644 --- a/17/1iran/index.html +++ b/17/1iran/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/17/2minnesota/index.html b/17/2minnesota/index.html index 1b6309c..6c84523 100644 --- a/17/2minnesota/index.html +++ b/17/2minnesota/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/17/3Ukraine/index.html b/17/3Ukraine/index.html index ba54090..b5145c6 100644 --- a/17/3Ukraine/index.html +++ b/17/3Ukraine/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/17/4trans/index.html b/17/4trans/index.html index 6bc1d9a..0bc0d93 100644 --- a/17/4trans/index.html +++ b/17/4trans/index.html @@ -12,7 +12,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/17/5syria/index.html b/17/5syria/index.html index a87bb36..faeacbf 100644 --- a/17/5syria/index.html +++ b/17/5syria/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/17/index.html b/17/index.html index 4b9a134..f3c4b1f 100644 --- a/17/index.html +++ b/17/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/18/1Deportations/index.html b/18/1Deportations/index.html index 3173893..67e1c2f 100644 --- a/18/1Deportations/index.html +++ b/18/1Deportations/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/18/2israel/index.html b/18/2israel/index.html index cc46fdb..18515d7 100644 --- a/18/2israel/index.html +++ b/18/2israel/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/18/3PROTESTS/index.html b/18/3PROTESTS/index.html index 80c8be5..b96015f 100644 --- a/18/3PROTESTS/index.html +++ b/18/3PROTESTS/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/18/4Ukraine/index.html b/18/4Ukraine/index.html index 6933e4e..a0a4bb8 100644 --- a/18/4Ukraine/index.html +++ b/18/4Ukraine/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/18/5debt/index.html b/18/5debt/index.html index 5586bfb..1ff89aa 100644 --- a/18/5debt/index.html +++ b/18/5debt/index.html @@ -14,7 +14,9 @@ > - + + +
diff --git a/18/6eos1/index.html b/18/6eos1/index.html index 95b4792..4b7787b 100644 --- a/18/6eos1/index.html +++ b/18/6eos1/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/18/7eos2/index.html b/18/7eos2/index.html index d186fe5..6de9b4d 100644 --- a/18/7eos2/index.html +++ b/18/7eos2/index.html @@ -13,7 +13,9 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > - + + +
diff --git a/18/index.html b/18/index.html index ef80a2c..40b743a 100644 --- a/18/index.html +++ b/18/index.html @@ -15,6 +15,8 @@ src="https://www.googletagmanager.com/gtag/js?id=G-R13B7T2SGY" > + +
diff --git a/github-to-prod-mapping.json b/github-to-prod-mapping.json new file mode 100644 index 0000000..f826dfa --- /dev/null +++ b/github-to-prod-mapping.json @@ -0,0 +1,985 @@ +{ + "volumes": [ + { + "github_volume": "I", + "github_path": "https://www.reddit.com/r/Destiny/comments/1j1t61a/weekly_news_breakdown_the_first_edition_of_the/", + "prod_path": "/volumes/1", + "note": "Volume I on GitHub is just a Reddit link, not a GitHub Pages volume", + "articles": [] + }, + { + "github_volume": "II", + "github_path": "/02", + "prod_path": "/volumes/2", + "articles": [ + { + "github_title": "Elon and DOGE", + "github_path": "/02/doge-and-elon/", + "prod_title": "DOGE and Elon", + "prod_path": "/articles/doge-and-elon", + "match_confidence": "high" + }, + { + "github_title": "Ukrainian Update", + "github_path": "/02/ukrainian-update/", + "prod_title": "Ukrainian Update", + "prod_path": "/articles/ukrainian-update", + "match_confidence": "high" + }, + { + "github_title": "Trump's tariffs", + "github_path": "/02/trumps-tariff-troubles/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing", + "note": "Not found on pragmaticpapers.com. Different from Vol VI's 'Trump's Tariffs Cause Stocks to Tumble'." + }, + { + "github_title": "Trump's executive orders", + "github_path": "/02/executive-orders/", + "prod_title": "Trump's executive orders from March 3 to March 7", + "prod_path": "/articles/trumps-executive-orders-from-march-3-to-march-7", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "III", + "github_path": "/03", + "prod_path": "/volumes/3", + "articles": [ + { + "github_title": "Schumer Folds", + "github_path": "/03/schumer-folds/", + "prod_title": "Schumer Folds on Funding", + "prod_path": "/articles/schumer-folds-on-funding", + "match_confidence": "high" + }, + { + "github_title": "A Student for Speech", + "github_path": "/03/a-student-for-speech/", + "prod_title": "A Student for Speech", + "prod_path": "/articles/a-student-for-speech", + "match_confidence": "high" + }, + { + "github_title": "When Transparency Becomes Opaque", + "github_path": "/03/when-transparency-becomes-opaque/", + "prod_title": "When Transparency Becomes Opaque", + "prod_path": "/articles/when-transparency-becomes-opaque", + "match_confidence": "high" + }, + { + "github_title": "Ukraine–Russia Update", + "github_path": "/03/ukraine-russia-update/", + "prod_title": "Ukraine Claws Back as Putin Rejects Ceasefire", + "prod_path": "/articles/ukraine-claws-back-as-putin-rejects-ceasefire", + "match_confidence": "high", + "note": "Title changed significantly on prod" + }, + { + "github_title": "Tesla Boycott", + "github_path": "/03/boycotting-protesting-or-crime/", + "prod_title": "Boycotting Tesla", + "prod_path": "/articles/boycotting-tesla", + "match_confidence": "high", + "note": "Different slug and slightly different title" + }, + { + "github_title": "Effective Outreach", + "github_path": "/03/effective-outreach/", + "prod_title": "Effective Outreach", + "prod_path": "/articles/effective-outreach", + "match_confidence": "high" + }, + { + "github_title": "Trump's Executive Orders", + "github_path": "/03/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of March 3, 2025", + "prod_path": "/articles/executive-order-weekly-report--week-of-march-3-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "IV", + "github_path": "/04", + "prod_path": "/volumes/4", + "articles": [ + { + "github_title": "Ceasefire In Name Only", + "github_path": "/04/ceasefire-in-name-only/", + "prod_title": "Ceasefire In Name Only", + "prod_path": "/articles/ceasefire-in-name-only", + "match_confidence": "high" + }, + { + "github_title": "DJT Flubs IvP", + "github_path": "/04/djt-flubs-israel-palestine/", + "prod_title": "DJT Flubs IvP", + "prod_path": "/articles/djt-flubs-ivp", + "match_confidence": "high" + }, + { + "github_title": "Elon's War on the Courts", + "github_path": "/04/elons-war-on-the-courts/", + "prod_title": "Elon's War on the Courts", + "prod_path": "/articles/elons-war-on-the-courts", + "match_confidence": "high" + }, + { + "github_title": "Just Show Up", + "github_path": "/04/just-show-up/", + "prod_title": "Just Show Up", + "prod_path": "/articles/just-show-up", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/04/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of March 10, 2025", + "prod_path": "/articles/executive-order-weekly-report", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "V", + "github_path": "/05", + "prod_path": "/volumes/5", + "articles": [ + { + "github_title": "TROs, Contempt, and the Last Stand of the Judiciary", + "github_path": "/05/tros-contempt-last-stand-of-judiciary/", + "prod_title": "TROs, Contempt, and the Last Stand of the Judiciary", + "prod_path": "/articles/tros-contempt-and-the-last-stand-of-the-judiciary", + "match_confidence": "high" + }, + { + "github_title": "Signal Chat Fiasco", + "github_path": "/05/signal-chat-fiasco/", + "prod_title": "Signal Chat Fiasco", + "prod_path": "/articles/signal-chat-fiasco", + "match_confidence": "high" + }, + { + "github_title": "When a Fail Becomes Too Big to Save", + "github_path": "/05/fail-too-big-to-save/", + "prod_title": "When a Fail Becomes Too Big to Save", + "prod_path": "/articles/when-a-fail-becomes-too-big-to-save", + "match_confidence": "high" + }, + { + "github_title": "Ukraine–Russia Update", + "github_path": "/05/ukraine-russia/", + "prod_title": "Ukraine-Russia Update", + "prod_path": "/articles/ukraine-russia-update", + "match_confidence": "high" + }, + { + "github_title": "You Are Playing with Weighted Dice", + "github_path": "/05/weighted-dice/", + "prod_title": "You Are Playing with Weighted Dice", + "prod_path": "/articles/you-are-playing-with-weighted-dice", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/05/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of March 17, 2025", + "prod_path": "/articles/executive-order-weekly-report--week-of-march-17-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "VI", + "github_path": "/06", + "prod_path": "/volumes/6", + "articles": [ + { + "github_title": "Destiny's Dissent: Billionaires", + "github_path": "/06/destinys-dissent/", + "prod_title": "Destiny's Dissent: Billionaires", + "prod_path": "/articles/destinys-dissent-billionaires", + "match_confidence": "high" + }, + { + "github_title": "Trump's Tariffs Cause Stocks to Tumble, Fears to Rise", + "github_path": "/06/trumps-tariffs-cause-stocks-to-tumble/", + "prod_title": "Trump's Tariffs Cause Stocks to Tumble, Fears to Rise", + "prod_path": "/articles/trumps-tariffs-cause-stocks-to-tumble-fears-to-rise", + "match_confidence": "high" + }, + { + "github_title": "When Beat the Drums of War", + "github_path": "/06/when-beat-the-drums-of-war/", + "prod_title": "When Beat the Drums of War", + "prod_path": "/articles/when-beat-the-drums-of-war", + "match_confidence": "high" + }, + { + "github_title": "Special Elections", + "github_path": "/06/special-elections/", + "prod_title": "Special Elections bring hope for Dems despite mixed results", + "prod_path": "/articles/special-elections-bring-hope-for-dems-despite-mixed-results", + "match_confidence": "high", + "note": "Title expanded on prod" + }, + { + "github_title": "Musk's Exit Wound", + "github_path": "/06/musks-exit-wound/", + "prod_title": "Musk's Exit Wound", + "prod_path": "/articles/musks-exit-wound", + "match_confidence": "high" + }, + { + "github_title": "Russia Builds and the U.S. Wavers", + "github_path": "/06/russia-builds-and-the-us-wavers/", + "prod_title": "Russia Builds and the U.S. Wavers", + "prod_path": "/articles/russia-builds-and-the-us-wavers", + "match_confidence": "high" + }, + { + "github_title": "Why I Am Optimistic About Ukraine", + "github_path": "/06/opinion-piece-ukraine/", + "prod_title": "Why I Am Optimistic About Ukraine", + "prod_path": "/articles/why-i-am-optimistic-about-ukraine", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/06/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of March 24, 2025", + "prod_path": "/articles/executive-order-weekly-report--week-of-march-24-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "VII", + "github_path": "/07", + "prod_path": "/volumes/7", + "articles": [ + { + "github_title": "Build Walls, Burn Bridges: Trump's Global Trade Disaster", + "github_path": "/07/build-walls-burn-bridges/", + "prod_title": "Build Walls, Burn Bridges: Trump's Global Trade Disaster", + "prod_path": "/articles/build-walls-burn-bridges-trumps-global-trade-disaster", + "match_confidence": "high" + }, + { + "github_title": "Trust Us, We're the Government: DOGE Edition", + "github_path": "/07/trust-us-were-the-government/", + "prod_title": "Trust Us, We're the Government: DOGE Edition", + "prod_path": "/articles/trust-us-were-the-government-doge-edition", + "match_confidence": "high" + }, + { + "github_title": "Powerlessness Corrupts: The Incorruptible Idealist", + "github_path": "/07/powerlessness-corrupts/", + "prod_title": "Powerlessness Corrupts: The Incorruptible Idealist", + "prod_path": "/articles/powerlessness-corrupts-the-incorruptible-idealist", + "match_confidence": "high" + }, + { + "github_title": "Russia and Ukraine Ramp up as Peace Deal Stalls", + "github_path": "/07/russia-ukraine/", + "prod_title": "Russia and Ukraine Ramp up as Peace Deal Stalls", + "prod_path": "/articles/russia-and-ukraine-ramp-up-as-peace-deal-stalls", + "match_confidence": "high" + }, + { + "github_title": "Same Story, Different Day for Israel and Palestine", + "github_path": "/07/israel-palestine/", + "prod_title": "Same Story, Different Day for Israel and Palestine", + "prod_path": "/articles/same-story-different-day-for-israel-and-palestine", + "match_confidence": "high" + }, + { + "github_title": "A Little Effort, a Big Impact", + "github_path": "/07/little-effort-big-impact/", + "prod_title": "A Little Effort, a Big Impact", + "prod_path": "/articles/a-little-effort-a-big-impact", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/07/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of March 31, 2025", + "prod_path": "/articles/executive-order-weekly-report--week-of-march-31-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "VIII", + "github_path": "/08", + "prod_path": "/volumes/8", + "articles": [ + { + "github_title": "Concepts of a Plan: Trump's Roadmap to Nowhere", + "github_path": "/08/concepts-of-a-plan/", + "prod_title": "Concepts of a Plan: Trump's Roadmap to Nowhere", + "prod_path": "/articles/concepts-of-a-plan-trumps-roadmap-to-nowhere", + "match_confidence": "high" + }, + { + "github_title": "Efficiency, but Make It Eugenics", + "github_path": "/08/efficiency-but-make-it-eugenics/", + "prod_title": "Efficiency, but Make It Eugenics", + "prod_path": "/articles/efficiency-but-make-it-eugenics", + "match_confidence": "high" + }, + { + "github_title": "Is War Next for Israel and Iran?", + "github_path": "/08/is-war-next-for-israel-and-iran/", + "prod_title": "Is War Next for Israel and Iran?", + "prod_path": "/articles/is-war-next-for-israel-and-iran", + "match_confidence": "high" + }, + { + "github_title": "Money in Politics 101", + "github_path": "/08/money-in-politics-101/", + "prod_title": "Money in Politics 101", + "prod_path": "/articles/money-in-politics-101", + "match_confidence": "high" + }, + { + "github_title": "Uncanceled: The Return of Disgraced Democrats", + "github_path": "/08/uncanceled-the-return-of-disgraced-democrats/", + "prod_title": "Uncanceled: The Return of Disgraced Democrats", + "prod_path": "/articles/uncanceled-the-return-of-disgraced-democrats", + "match_confidence": "high" + }, + { + "github_title": "Zeitenwende and Germany's Role in European Defense", + "github_path": "/08/zeitenwende-and-germanys-role-in-european-defense/", + "prod_title": "Zeitenwende and Germany's Role in European Defense", + "prod_path": "/articles/zeitenwende-and-germanys-role-in-european-defense", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/08/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of April 7, 2025", + "prod_path": "/articles/executive-order-weekly-report-week-of-april-7-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "IX", + "github_path": "/09", + "prod_path": "/volumes/9", + "articles": [ + { + "github_title": "Judge Detained as Trump Admin Escalates", + "github_path": "/09/judge-detained/", + "prod_title": "Judge Detained as Trump Admin Escalates", + "prod_path": "/articles/judge-detained-as-trump-admin-escalates", + "match_confidence": "high" + }, + { + "github_title": "From Ceasefires to Car Bombs: Ukraine's Fight Against Capitulation", + "github_path": "/09/from-ceasefires-to-car-bombs/", + "prod_title": "From Ceasefires to Car Bombs: Ukraine's Fight Against Capitulation", + "prod_path": "/articles/from-ceasefires-to-car-bombs-ukraines-fight-against-capitulation", + "match_confidence": "high" + }, + { + "github_title": "The Coalition of the Willing", + "github_path": "/09/coalition-of-the-willing/", + "prod_title": "The Coalition of the Willing", + "prod_path": "/articles/the-coalition-of-the-willing", + "match_confidence": "high" + }, + { + "github_title": "Chainsaws Aren't Office Tools", + "github_path": "/09/chainsaws-arent-office-tools/", + "prod_title": "Chainsaws Aren't Office Tools", + "prod_path": "/articles/chainsaws-arent-office-tools", + "match_confidence": "high" + }, + { + "github_title": "They Make a Desert and Call it Peace", + "github_path": "/09/they-make-a-desert/", + "prod_title": "They Make a Desert and Call it Peace", + "prod_path": "/articles/they-make-a-desert-and-call-it-peace", + "match_confidence": "high" + }, + { + "github_title": "The Frontline of MAGA Election Attacks", + "github_path": "/09/maga-election-attacks/", + "prod_title": "The Frontline of MAGA Election Attacks", + "prod_path": "/articles/the-frontline-of-maga-election-attacks", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/09/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of April 14, 2025", + "prod_path": "/articles/executive-order-weekly-report--week-of-april-14-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "X", + "github_path": "/10", + "prod_path": "/volumes/10", + "articles": [ + { + "github_title": "100 Days, 100 Ways Trump Has Hurt the US", + "github_path": "/10/100-days/", + "prod_title": "100 Days, 100 Ways Trump Has Hurt the US", + "prod_path": "/articles/100-days-100-ways-trump-has-hurt-the-us", + "match_confidence": "high" + }, + { + "github_title": "Mineral Deal Signed: Ukraine Gains Leverage", + "github_path": "/10/minerals-deal-signed/", + "prod_title": "Mineral Deal Signed: Ukraine Gains Leverage", + "prod_path": "/articles/mineral-deal-signed-ukraine-gains-leverage", + "match_confidence": "high" + }, + { + "github_title": "The Briefest History of Internal EU Migration", + "github_path": "/10/brief-history/", + "prod_title": "The Briefest History of Internal EU Migration", + "prod_path": "/articles/the-briefest-history-of-internal-eu-migration", + "match_confidence": "high" + }, + { + "github_title": "No Data Left Behind", + "github_path": "/10/no-data-left-behind/", + "prod_title": "No Data Left Behind", + "prod_path": "/articles/no-data-left-behind", + "match_confidence": "high" + }, + { + "github_title": "DOGE Insider Threat", + "github_path": "/10/doge-insider-threat/", + "prod_title": "DOGE Insider Threat", + "prod_path": "/articles/doge-insider-threat", + "match_confidence": "high" + }, + { + "github_title": "Europe Braces for Impact", + "github_path": "/10/europe-braces-for-impact/", + "prod_title": "Europe Braces for Impact", + "prod_path": "/articles/europe-braces-for-impact", + "match_confidence": "high" + }, + { + "github_title": "Rain of Fire: The Threat from the North", + "github_path": "/10/rain-of-fire/", + "prod_title": "Rain of Fire: The Threat from the North", + "prod_path": "/articles/rain-of-fire-the-threat-from-the-north", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/10/executive-orders/", + "prod_title": "Executive Order Weekly Report - Week of April 21, 2025", + "prod_path": "/articles/executive-order-weekly-report---week-of-april-21-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "XI", + "github_path": "/11", + "prod_path": "/volumes/11", + "articles": [ + { + "github_title": "Destiny's Dissent: Home Ownership", + "github_path": "/11/destinys-dissent/", + "prod_title": "Destiny's Dissent: Home Ownership", + "prod_path": "/articles/destinys-dissent-home-ownership", + "match_confidence": "high" + }, + { + "github_title": "Europe Strikes Back: EU Unveils Tariff Retaliation Amid Escalating U.S. Trade Dispute", + "github_path": "/11/eu-strikes-back/", + "prod_title": "Europe Strikes Back: EU Unveils Tariff Retaliation Amid Escalating U.S. Trade Dispute", + "prod_path": "/articles/europe-strikes-back-eu-unveils-tariff-retaliation-amid-escalating-us-trade-dispute", + "match_confidence": "high" + }, + { + "github_title": "Constructing Crisis: The Fabrication of Fraud by DOGE", + "github_path": "/11/constructing-crisis/", + "prod_title": "Constructing Crisis: The Fabrication of Fraud by DOGE", + "prod_path": "/articles/constructing-crisis-the-fabrication-of-fraud-by-doge", + "match_confidence": "high" + }, + { + "github_title": "In Memory of Leon Greenman, a Holocaust Survivor", + "github_path": "/11/in-memory-of-leon-greenman/", + "prod_title": "In Memory of Leon Greenman, a Holocaust Survivor", + "prod_path": "/articles/in-memory-of-leon-greenman-a-holocaust-survivor", + "match_confidence": "high" + }, + { + "github_title": "Unity Parades in Moscow, Pressure in Kyiv", + "github_path": "/11/unity-parades-moscow-pressure-kyiv/", + "prod_title": "Unity Parades in Moscow, Pressure in Kyiv", + "prod_path": "/articles/unity-parades-in-moscow-pressure-in-kyiv", + "match_confidence": "high" + }, + { + "github_title": "Gaza's Protests and the Fight to be Heard", + "github_path": "/11/gazas-protests-fight-to-be-heard/", + "prod_title": "Gaza's Protests and the Fight to be Heard", + "prod_path": "/articles/gazas-protests-and-the-fight-to-be-heard", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/11/executive-orders/", + "prod_title": "Executive Order Weekly Report – Week of April 28, 2025", + "prod_path": "/articles/executive-order-weekly-report--week-of-april-28-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "XII", + "github_path": "/12", + "prod_path": "/volumes/12", + "articles": [ + { + "github_title": "Road to Brexit", + "github_path": "/12/road-to-brexit/", + "prod_title": "The Road to Brexit", + "prod_path": "/articles/the-road-to-brexit", + "match_confidence": "high" + }, + { + "github_title": "Bridging the Channel: The UK's Strategic Pivot Back to Europe", + "github_path": "/12/bridging-the-channel/", + "prod_title": "Bridging the Channel: The UK's Strategic Pivot Back to Europe", + "prod_path": "/articles/bridging-the-channel-the-uks-strategic-pivot-back-to-europe", + "match_confidence": "high" + }, + { + "github_title": "Deadlock", + "github_path": "/12/deadlock/", + "prod_title": "Deadlock In Istanbul", + "prod_path": "/articles/deadlock-in-istanbul", + "match_confidence": "high" + }, + { + "github_title": "Checks in the mail", + "github_path": "/12/checks-in-the-mail/", + "prod_title": "Checks in the Mail", + "prod_path": "/articles/checks-in-the-mail", + "match_confidence": "high" + }, + { + "github_title": "Super Sunday", + "github_path": "/12/super-sunday/", + "prod_title": "Super Sunday 2025; EU elections", + "prod_path": "/articles/super-sunday-2025-eu-elections", + "match_confidence": "high" + }, + { + "github_title": "Path to Impeachment", + "github_path": "/12/the-path-to-impeachment/", + "prod_title": "Path to Impeachment", + "prod_path": "/articles/path-to-impeachment", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/12/eos/", + "prod_title": "Executive Order Weekly Report - Week of May 5, 2025", + "prod_path": "/articles/executive-order-weekly-report---week-of-may-5-2025", + "match_confidence": "high" + }, + { + "github_title": "Occupation by Design", + "github_path": "/12/displacement/", + "prod_title": "Occupation by Design", + "prod_path": "/articles/occupation-by-design", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "XIII", + "github_path": "/13", + "prod_path": "/volumes/13", + "articles": [ + { + "github_title": "The Big Beautiful Trap", + "github_path": "/13/big-beautiful-trap/", + "prod_title": "The Big Beautiful Trap", + "prod_path": "/articles/the-big-beautiful-trap", + "match_confidence": "high" + }, + { + "github_title": "Slam The Brakes: Universal Injunctions in the Trump Admin", + "github_path": "/13/slam-the-brakes/", + "prod_title": "Slam The Brakes: Universal Injunctions in the Trump Admin", + "prod_path": "/articles/slam-the-brakes-universal-injunctions-in-the-trump-admin", + "match_confidence": "high" + }, + { + "github_title": "The Storm was Natural, the Disaster will be Political", + "github_path": "/13/storm/", + "prod_title": "The Storm was Natural, the Disaster will be Political", + "prod_path": "/articles/the-storm-was-natural-the-disaster-will-be-political", + "match_confidence": "high" + }, + { + "github_title": "Systemic Orthodoxy", + "github_path": "/13/systemic-orthodoxy/", + "prod_title": "Systemic Orthodoxy", + "prod_path": "/articles/systemic-orthodoxy", + "match_confidence": "high" + }, + { + "github_title": "Fool Me Once", + "github_path": "/13/fool-me-once/", + "prod_title": "Fool Me Once", + "prod_path": "/articles/fool-me-once", + "match_confidence": "high" + }, + { + "github_title": "Overnight Attacks on Ukraine and the Looming Summer Offensive", + "github_path": "/13/over-night-attacks/", + "prod_title": "Overnight Attacks on Ukraine and the Looming Summer Offensive", + "prod_path": "/articles/overnight-attacks-on-ukraine-and-the-looming-summer-offensive", + "match_confidence": "high" + }, + { + "github_title": "Gideon's Chariots", + "github_path": "/13/gideons-chariots/", + "prod_title": "Gideon's Chariots", + "prod_path": "/articles/gideons-chariots", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/13/eos/", + "prod_title": "Executive Order Weekly Report - Week of May 12, 2025", + "prod_path": "/articles/executive-order-weekly-report---week-of-may-12-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "XIV", + "github_path": "/14", + "prod_path": "/volumes/14", + "articles": [ + { + "github_title": "Famine: The Gaza Humanitarian Catastrophe and the Erosion of Aid Principles", + "github_path": "/14/FAMINE/", + "prod_title": "Famine: The Gaza Humanitarian Catastrophe and the Erosion of Aid Principles", + "prod_path": "/articles/famine-the-gaza-humanitarian-catastrophe-and-the-erosion-of-aid-principles", + "match_confidence": "high" + }, + { + "github_title": "The Pathfinder: How A Trump-Appointee Became The Strongest Defender of Tribal Rights in Supreme Court History", + "github_path": "/14/Pathfinder/", + "prod_title": "The Pathfinder: How A Trump-Appointee Became The Strongest Defender of Tribal Rights in Supreme Court History", + "prod_path": "/articles/the-pathfinder-how-a-trump-appointee-became-the-strongest-defender-of-tribal-rights-in-supreme-court-history", + "match_confidence": "high" + }, + { + "github_title": "Istanbul or Bust", + "github_path": "/14/instanbul/", + "prod_title": "Istanbul or Bust", + "prod_path": "/articles/istanbul-or-bust", + "match_confidence": "high" + }, + { + "github_title": "The Battle For the Ivory Tower", + "github_path": "/14/battle/", + "prod_title": "The Battle For the Ivory Tower", + "prod_path": "/articles/the-battle-for-the-ivory-tower", + "match_confidence": "high" + }, + { + "github_title": "Stand Up! Fighting Illiberalism: Protests in Slovakia and Hungary", + "github_path": "/14/revolt/", + "prod_title": "Stand Up! Fighting Illiberalism: Protests in Slovakia and Hungary", + "prod_path": "/articles/stand-up-fighting-illiberalism-protests-in-slovakia-and-hungary", + "match_confidence": "high" + }, + { + "github_title": "A Whole New World: Argentina's 2025 Elections", + "github_path": "/14/Argentina/", + "prod_title": "A Whole New World: Argentina's 2025 Elections", + "prod_path": "/articles/a-whole-new-world-argentinas-2025-elections", + "match_confidence": "high" + }, + { + "github_title": "The Illusion of Cool: Unmasking Nayib Bukele's Authoritarian Rule in El Salvador (Part 1)", + "github_path": "/14/Illusion/", + "prod_title": "The Illusion of Cool: Unmasking Nayib Bukele's Authoritarian Rule in El Salvador (Part 1)", + "prod_path": "/articles/the-illusion-of-cool-unmasking-nayib-bukeles-authoritarian-rule-in-el-salvador-part-1", + "match_confidence": "high" + }, + { + "github_title": "Ruff Considerations", + "github_path": "/14/ruff_considerations/", + "prod_title": "Ruff Considerations", + "prod_path": "/articles/ruff-considerations", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report", + "github_path": "/14/eos/", + "prod_title": "Executive Order Weekly Report - Week of May 19, 2025", + "prod_path": "/articles/executive-order-weekly-report---week-of-may-19-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "XV", + "github_path": "/15", + "prod_path": "/volumes/15", + "note": "Volume XV on pragmaticpapers.com shows NO articles - the articles grid is empty. All 8 GitHub articles are MISSING from prod.", + "articles": [ + { + "github_title": "California Screamin'", + "github_path": "/15/california-screaming/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing" + }, + { + "github_title": "The Making of a Strongman: Unmasking Nayib Bukele's Authoritarian Rule in El Salvador (Part 2)", + "github_path": "/15/bukele/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing" + }, + { + "github_title": "Sleazebag", + "github_path": "/15/sleazebag/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing" + }, + { + "github_title": "Ceasefire Visions: Does Hamas Dream of Electric Peace?", + "github_path": "/15/hamas/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing" + }, + { + "github_title": "Attack on Science: Trump 2.0 and the NIH", + "github_path": "/15/nih/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing" + }, + { + "github_title": "More Than a Woman—And Somehow Less", + "github_path": "/15/less-than-a-woman/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing" + }, + { + "github_title": "Ten Years later: The Migration Crisis That Shook Europe", + "github_path": "/15/migration-crisis/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing", + "note": "Not the same as 'Migration to the UK: Perception Versus Reality' which is a different article" + }, + { + "github_title": "Executive Order Weekly Report - Week of May 26, 2025", + "github_path": "/15/eos/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing" + } + ] + }, + { + "github_volume": "XVI", + "github_path": "/16", + "prod_path": "/volumes/16", + "articles": [ + { + "github_title": "Rising Lion: An Opening Salvo", + "github_path": "/16/israel/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing", + "note": "Not found on pragmaticpapers.com" + }, + { + "github_title": "The Stage is Yours (Part 3)", + "github_path": "/16/bukele/", + "prod_title": null, + "prod_path": null, + "match_confidence": "missing", + "note": "Bukele Part 3 not found on pragmaticpapers.com (only Part 1 exists)" + }, + { + "github_title": "Seeing What You Want to See: RFK, Vaccines, and the Media Mirror", + "github_path": "/16/rfk/", + "prod_title": "Seeing What You Want to See: RFK, Vaccines, and the Media Mirror", + "prod_path": "/articles/seeing-what-you-want-to-see-rfk-vaccines-and-the-media-mirror", + "match_confidence": "high" + }, + { + "github_title": "New Chapter, Old Wounds: South Korea's Political Crossroads", + "github_path": "/16/korea/", + "prod_title": "New Chapter, Old Wounds: South Korea's Political Crossroads", + "prod_path": "/articles/new-chapter-old-wounds-south-koreas-political-crossroads", + "match_confidence": "high" + }, + { + "github_title": "The many faces of Karol Nawrocki, the new polish president", + "github_path": "/16/poland/", + "prod_title": "The many faces of Karol Nawrocki, the new polish president", + "prod_path": "/articles/the-many-faces-of-karol-nawrocki-the-new-polish-president", + "match_confidence": "high" + }, + { + "github_title": "One Million and Counting", + "github_path": "/16/ukraine/", + "prod_title": "One Million and Counting", + "prod_path": "/articles/one-million-and-counting", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report - Week of June 02, 2025", + "github_path": "/16/eos/", + "prod_title": "Executive Order Weekly Report - Week of June 02, 2025", + "prod_path": "/articles/executive-order-weekly-report---week-of-june-02-2025", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "XVII", + "github_path": "/17", + "prod_path": "/volumes/17", + "articles": [ + { + "github_title": "On the Brink: The Israel-Iran War, U.S. Strikes, and the Future of the Middle East", + "github_path": "/17/1iran/", + "prod_title": "On the Brink: The Israel-Iran War, U.S. Strikes, and the Future of the Middle East", + "prod_path": "/articles/on-the-brink-the-israel-iran-war-us-strikes-and-the-future-of-the-middle-east", + "match_confidence": "high" + }, + { + "github_title": "Targeted for Public Service: Minnesota Leaders Caught in Deadly Plot", + "github_path": "/17/2minnesota/", + "prod_title": "Targeted for Public Service: Minnesota Leaders Caught in Deadly Plot", + "prod_path": "/articles/targeted-for-public-service-minnesota-leaders-caught-in-deadly-plot", + "match_confidence": "high" + }, + { + "github_title": "They Want It All: Putin's Open Threats, Trump's Silence, and Why We Can't Give Up", + "github_path": "/17/3Ukraine/", + "prod_title": "They Want It All: Putin's Open Threats, Trump's Silence, and Why We Can't Give Up", + "prod_path": "/articles/they-want-it-all-putins-open-threats-trumps-silence-and-why-we-cant-give-up", + "match_confidence": "high" + }, + { + "github_title": "Right to Treatment", + "github_path": "/17/4trans/", + "prod_title": "Right to Treatment", + "prod_path": "/articles/right-to-treatment", + "match_confidence": "high" + }, + { + "github_title": "Syria's New Dawn Appears Darkly Authoritarian", + "github_path": "/17/5syria/", + "prod_title": "Syria's New Dawn Appears Darkly Authoritarian", + "prod_path": "/articles/syrias-new-dawn-appears-darkly-authoritarian", + "match_confidence": "high" + } + ] + }, + { + "github_volume": "XVIII", + "github_path": "/18", + "prod_path": "/volumes/18", + "articles": [ + { + "github_title": "Unclean Hands, Unchecked Power: Supreme Court Greenlights 'Third Country' Deportations", + "github_path": "/18/1Deportations/", + "prod_title": "Unclean Hands, Unchecked Power: Supreme Court Greenlights 'Third Country' Deportations", + "prod_path": "/articles/unclean-hands-unchecked-power-supreme-court-greenlights-third-country-deportations", + "match_confidence": "high" + }, + { + "github_title": "Aid Under Fire - The Collapse of Humanitarian Credibility in Gaza", + "github_path": "/18/2israel/", + "prod_title": "Aid Under Fire - The Collapse of Humanitarian Credibility in Gaza", + "prod_path": "/articles/aid-under-fire---the-collapse-of-humanitarian-credibility-in-gaza", + "match_confidence": "high" + }, + { + "github_title": "Unlawful Assemblies and Unfinished Arguments", + "github_path": "/18/3PROTESTS/", + "prod_title": "Unlawful Assemblies and Unfinished Arguments", + "prod_path": "/articles/unlawful-assemblies-and-unfinished-arguments", + "match_confidence": "high" + }, + { + "github_title": "Ukraine's War Effort from Kursk to Kostiantynivka (June 22–28)", + "github_path": "/18/4Ukraine/", + "prod_title": "Ukraine's War Effort from Kursk to Kostiantynivka (June 22–28)", + "prod_path": "/articles/-ukraines-war-effort-from-kursk-to-kostiantynivka-june-2228", + "match_confidence": "high" + }, + { + "github_title": "Debt Brakes and Austerity: When Fiscal Rules Ignore Returns", + "github_path": "/18/5debt/", + "prod_title": "Debt Brakes and Austerity: When Fiscal Rules Ignore Returns", + "prod_path": "/articles/debt-brakes-and-austerity-when-fiscal-rules-ignore-returns", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report - Week of June 09, 2025", + "github_path": "/18/6eos1/", + "prod_title": "Executive Order Weekly Report - Week of June 09, 2025", + "prod_path": "/articles/executive-order-weekly-report---week-of-june-09-2025", + "match_confidence": "high" + }, + { + "github_title": "Executive Order Weekly Report - Week of June 16, 2025", + "github_path": "/18/7eos2/", + "prod_title": "Executive Order Weekly Report - Week of June 16, 2025", + "prod_path": "/articles/executive-order-weekly-report---week-of-june-16-2025", + "match_confidence": "high" + } + ] + } + ], + "summary": { + "total_github_volumes": 18, + "total_github_volumes_with_articles": 17, + "total_github_articles": 113, + "matched_articles": 101, + "missing_from_prod": 11, + "missing_articles": [ + "Vol II: Trump's tariffs (/02/trumps-tariff-troubles/)", + "Vol XV: California Screamin' (/15/california-screaming/)", + "Vol XV: The Making of a Strongman: Bukele Part 2 (/15/bukele/)", + "Vol XV: Sleazebag (/15/sleazebag/)", + "Vol XV: Ceasefire Visions: Does Hamas Dream of Electric Peace? (/15/hamas/)", + "Vol XV: Attack on Science: Trump 2.0 and the NIH (/15/nih/)", + "Vol XV: More Than a Woman—And Somehow Less (/15/less-than-a-woman/)", + "Vol XV: Ten Years later: The Migration Crisis That Shook Europe (/15/migration-crisis/)", + "Vol XV: Executive Order Weekly Report - Week of May 26, 2025 (/15/eos/)", + "Vol XVI: Rising Lion: An Opening Salvo (/16/israel/)", + "Vol XVI: The Stage is Yours (Part 3) (/16/bukele/)" + ], + "note_on_volume_1": "Volume I links to a Reddit post, not a GitHub Pages volume" + } +} diff --git a/scripts/apply-prod-tags.js b/scripts/apply-prod-tags.js new file mode 100644 index 0000000..9b8c5f8 --- /dev/null +++ b/scripts/apply-prod-tags.js @@ -0,0 +1,172 @@ +const fs = require('fs'); +const path = require('path'); + +const PROD_BASE = 'https://pragmaticpapers.com'; +const MAPPING_FILE = path.join(__dirname, '..', 'github-to-prod-mapping.json'); + +// Each mode defines a tag to inject into . +// The `build` function receives the full prod URL and returns an HTML string. +// The `detect` pattern is used to check if the tag already exists in the file. +const MODES = { + redirect: { + description: ' for instant redirect', + detect: 'http-equiv="refresh"', + build: (url) => ` `, + remove: /^[ \t]*]*>\n?/gm, + }, + canonical: { + description: ' pointing to prod URL', + detect: 'rel="canonical"', + build: (url) => ` `, + remove: /^[ \t]*]*>\n?/gm, + }, +}; + +function usage() { + console.log('Usage: node apply-prod-tags.js [--dry-run] [--remove]'); + console.log(' node apply-prod-tags.js all [--dry-run] [--remove]\n'); + console.log('Modes:'); + for (const [name, mode] of Object.entries(MODES)) { + console.log(` ${name.padEnd(12)} ${mode.description}`); + } + console.log(` ${'all'.padEnd(12)} Apply all modes at once`); + console.log('\nOptions:'); + console.log(' --dry-run Show what would be changed without writing files'); + console.log(' --remove Remove the tags instead of adding them'); + process.exit(1); +} + +function collectProdMappings() { + const mapping = JSON.parse(fs.readFileSync(MAPPING_FILE, 'utf8')); + const entries = []; + + for (const vol of mapping.volumes) { + if (vol.prod_path && vol.github_path && !vol.github_path.startsWith('http')) { + entries.push({ file: path.join('.', vol.github_path, 'index.html'), prodUrl: PROD_BASE + vol.prod_path }); + } + for (const article of vol.articles) { + if (article.prod_path && article.match_confidence !== 'missing') { + entries.push({ file: path.join('.', article.github_path, 'index.html'), prodUrl: PROD_BASE + article.prod_path }); + } + } + } + + return entries; +} + +function applyTags(entries, modes, dryRun) { + let modified = 0; + let skipped = 0; + let missing = 0; + + for (const { file, prodUrl } of entries) { + if (!fs.existsSync(file)) { + console.log(`MISSING: ${file}`); + missing++; + continue; + } + + let html = fs.readFileSync(file, 'utf8'); + let changed = false; + + const tagsToInsert = []; + for (const [name, mode] of Object.entries(modes)) { + if (html.includes(mode.detect)) { + continue; + } + tagsToInsert.push(mode.build(prodUrl)); + } + + if (tagsToInsert.length === 0) { + skipped++; + continue; + } + + const insertion = tagsToInsert.join('\n') + '\n '; + html = html.replace('', insertion + ''); + + if (dryRun) { + console.log(`WOULD UPDATE: ${file} -> ${prodUrl}`); + } else { + fs.writeFileSync(file, html); + console.log(`OK: ${file} -> ${prodUrl}`); + } + modified++; + } + + console.log(`\n--- Summary ---`); + console.log(`${dryRun ? 'Would modify' : 'Modified'}: ${modified}`); + console.log(`Already had tags: ${skipped}`); + console.log(`Missing files: ${missing}`); +} + +function removeTags(entries, modes, dryRun) { + let modified = 0; + let skipped = 0; + let missing = 0; + + for (const { file } of entries) { + if (!fs.existsSync(file)) { + missing++; + continue; + } + + let html = fs.readFileSync(file, 'utf8'); + let changed = false; + + for (const [name, mode] of Object.entries(modes)) { + const updated = html.replace(mode.remove, ''); + if (updated !== html) { + html = updated; + changed = true; + } + } + + if (!changed) { + skipped++; + continue; + } + + if (dryRun) { + console.log(`WOULD REMOVE from: ${file}`); + } else { + fs.writeFileSync(file, html); + console.log(`REMOVED from: ${file}`); + } + modified++; + } + + console.log(`\n--- Summary ---`); + console.log(`${dryRun ? 'Would modify' : 'Modified'}: ${modified}`); + console.log(`No tags to remove: ${skipped}`); + console.log(`Missing files: ${missing}`); +} + +// --- main --- +const args = process.argv.slice(2); +if (args.includes('--list') || args.length === 0) usage(); + +const dryRun = args.includes('--dry-run'); +const remove = args.includes('--remove'); +const modeName = args.find((a) => !a.startsWith('--')); + +if (!modeName) usage(); + +let selectedModes; +if (modeName === 'all') { + selectedModes = MODES; +} else if (MODES[modeName]) { + selectedModes = { [modeName]: MODES[modeName] }; +} else { + console.error(`Unknown mode: ${modeName}\n`); + usage(); +} + +const entries = collectProdMappings(); +console.log(`${remove ? 'Removing' : 'Applying'} tags for ${entries.length} pages.\n`); + +if (remove) { + removeTags(entries, selectedModes, dryRun); +} else { + applyTags(entries, selectedModes, dryRun); +}