diff --git a/html/changelogs/AutoChangeLog-pr-1184.yml b/html/changelogs/AutoChangeLog-pr-1184.yml
deleted file mode 100644
index 61e27789eb78..000000000000
--- a/html/changelogs/AutoChangeLog-pr-1184.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Absolucy"
-delete-after: True
-changes:
- - rscdel: "Removed \"VALID\", \"AHELP\", \"ICKY\", and \"OCKY\" from the possible Tourettes phrases."
- - rscadd: "Added \"MROW\" to the possible possible Tourettes phrases."
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml
new file mode 100644
index 000000000000..d6679a4784d9
--- /dev/null
+++ b/html/changelogs/archive/2024-02.yml
@@ -0,0 +1,115 @@
+2024-02-10:
+ Absolucy:
+ - bugfix: Fix the hypnotic whisper donator items not having any actual pizazz to
+ the whisper.
+ - balance: The hacked serverlink implant is no longer job-restricted.
+ - qol: The hacked serverlink implant can now do sleeper agent surgery if the user
+ has the relevant objective.
+ - balance: The serverlink R&D tech node is no longer locked behind BEPIS tech (bitrunners
+ literally never buy the techdisks anyways)
+ - bugfix: Fix broken disposal piping in the DeltaStation curator study.
+ - bugfix: Fix succumb last words being double-encoded (i.e `i'm` becoming `i'lm`)
+ - qol: Changed directional area names to be less confusing, i.e "Fore Maintenance"
+ is now "North Maintenance", and "Port Quarter Solars" is now "Southwest Solars".
+ - rscdel: Removed "VALID", "AHELP", "ICKY", and "OCKY" from the possible Tourettes
+ phrases.
+ - rscadd: Added "MROW" to the possible possible Tourettes phrases.
+ Absolucy, ChungusGamer666, GPeckman:
+ - rscadd: Burning items now get (small) smoke particles. Sick. (ChungusGamer666)
+ - bugfix: Burning objects now clear their burning overlay properly. (ChungusGamer666)
+ - qol: Examining burning objects will always tell you that they are burning. (ChungusGamer666)
+ - bugfix: The fire visual on mobs should no longer persist after the fire has been
+ extinguished. (GPeckman)
+ CannibalHunter:
+ - rscadd: Added a new traitor weapon. The "Whispering-Jester .45"!
+ DexeeXI:
+ - rscadd: :)
+ DimWhat:
+ - bugfix: Fixed bodytype swapping in magic mirrors.
+ - bugfix: Made a few clothing items lacking alternate sprites nonadjustable.
+ - bugfix: Cowboy sec hats no longer make you bald
+ DrDiasyl aka DrTuxedo#0931, Absolucy:
+ - qol: Now blocking an attack will play a sound and display a spark effect, giving
+ back feedback
+ - sound: 'parry.ogg was updated to a better-sounding version sound: shieldbash.ogg
+ no longer has noise and unnecessary silence sound: New block_shield.ogg and
+ block_blade.ogg for shields and energy swords'
+ - code_imp: Cultists items no longer have their own code for playing parrying sounds
+ FernandoJ8:
+ - sound: The Guide to Advanced Mimery book series now only make a very faint noise
+ when turning their pages, in order to match their description
+ KittyNoodle:
+ - rscadd: 5 additional tapes to every radio room.
+ - rscdel: Removes a lot of kat artifacts across tramstation
+ - bugfix: Fixes disposals on tramstation and deltastation.
+ - bugfix: Deltastation xenobio maints is once again wired correctly
+ - bugfix: Fixes the broken access on engi maints in tramstation.
+ KnigTheThrasher:
+ - rscdel: Removed underwear from lizards
+ - rscdel: Ashwalkers are unable to wear underclothes
+ KnigTheThrasher, DimWhat:
+ - rscadd: Added updated digitigrade sprites from DimWhat
+ - rscdel: Removed normal leg type from lizards
+ Melbert, Absolucy:
+ - balance: Transformation sting now lasts 8 minutes, down from permanent. However,
+ the effect is paused for dead and stasis mobs, making it permanent SO LONG AS
+ they stay dead or in stasis. The effect is also permanent if used on a monkey.
+ - balance: Transformation sting now costs 33 chemicals, down from 50.
+ - balance: Transformation sting now costs 2 dna points, down from 3.
+ NicoDeLuna:
+ - rscadd: Elite Simian hairstyle
+ SeeBeeSee:
+ - bugfix: Food/seed items can no longer be composted regardless of distance, must
+ be adjacent.
+ - balance: Hard-capped killer tomatoes from having near-instant speed and potentially
+ infinite health/damage
+ The-Black-Screen:
+ - rscadd: added more badges to the main README file.
+ - image: added `fueled-by-potassium.svg` to `monkestation/badges`.
+ - spellcheck: fixed grammatical errors.
+ - code_imp: switched over to our links
+ carlarctg, Weird Orb, Ghommie, nikothedude, Jacquerel, MrMelbert, san7890, Helg2:
+ - image: Heavily reworks and resprites first aid analyzers. They now display if
+ they're happy, sad, angry, or warning you! Also a 'pricking' animation.
+ - rscadd: First aid analyzers are now found in all basic and specialized medkits.
+ Toxin medkits get a new* disease analyzer. Miners get a miner-colored one in
+ their box.
+ - balance: Scanning yourself with a first aid analyzer will 'create a holo-image
+ with treatment instructions next to your wounds', doubling the speed of treatment
+ of scanned wounds!
+ - sound: Health analyzers and gene scanners now have a scanning sound, courtesy
+ of CM.
+ - refactor: Refactored some wound code to make treatment duration changes and changes
+ in the description of wounds easier.
+ - bugfix: Fixed a dummy parent feature of the health analyzer (Verbose mode) showing
+ up, uselessly, on the disease and first aid subtypes.
+ - image: Surgical processors and slime scanners have recieved a similar resprite.
+ - bugfix: Woundscans no longer runtime
+ - bugfix: Normal health analyzers can no longer give the first aid bonus when woundscanning
+ - rscadd: Several common 'household' reagents can be used as improvised medicine
+ treatment.
+ - rscadd: Drinking tea will help mend (non-bone) wounds over time.
+ - rscadd: Flour and corn starch may be splashed onto wounds to help dry them up,
+ though they'll have a negative effect on burn wounds.
+ - rscadd: Added a new reagent, saltwater, made by combining table salt with water.
+ - rscadd: Table salt and saltwater can be splashed onto wounds as well, reducing
+ bleeding and improving sanitization and disinfection significantly. However,
+ the coarse undiluted salt will irritate the wounds, reducing clot rate and flesh
+ healing, and both of the reagents will increase a burn wound's infestation rate.
+ - rscadd: Altered Table Salt's recipe to just need sodium and chloride. Changed
+ the recipe of Pentetic Acid and Heparin to need table salt (sodium x chloride)
+ and thus slightly altered the total output of those reagents (pentacid went
+ from 5u per reaction to 4u, heparin 4u->3u)
+ - rscadd: Saline-Glucose Solution now needs 2u of saltwater and 1u of sugar, meaning
+ the overall recipe should be completely unchanged in practice. Contact me on
+ discord if any issues arise from these chemical changes!
+ - qol: First aid analyzers now give easy-to-understand direct information, with
+ the specific recommended treatments bolded in the analysis text. They also have
+ a 'unique' extra bit of info, telling you about improvised ways to remedy your
+ wound.
+ - balance: Bone gel standart amount has been increased to 5.
+ thgvr, KnigTheThrasher:
+ - rscadd: '*thump and *squeal emotes for sarathi aka lizardpeople'
+ - rscadd: upgraded *weh
+ wraith-54321:
+ - bugfix: you can no longer hit people with clockwork weapons from range
diff --git a/tools/pull_request_hooks/catchUp.js b/tools/pull_request_hooks/catchUp.js
new file mode 100644
index 000000000000..ba8ab8dee5d3
--- /dev/null
+++ b/tools/pull_request_hooks/catchUp.js
@@ -0,0 +1,70 @@
+import { Octokit } from '@octokit/rest';
+import { parseChangelog } from "./changelogParser.js";
+import { changelogToYml } from "./autoChangelog.js";
+import { writeFileSync } from "node:fs";
+
+const octokit = new Octokit({
+ userAgent: 'changelog catchup thingymajig v1',
+ auth: process.env.GITHUB_TOKEN,
+});
+
+// Replace these values with your GitHub repository owner, repo name, and the PR number you're interested in
+if (process.argv.length !== 5) {
+ console.error('Expected three arguments!');
+ process.exit(1);
+}
+
+const owner = process.argv[2];
+const repo = process.argv[3];
+const initial_pr_number = parseInt(process.argv[4]);
+
+async function get_merged_after() {
+ try {
+ // Get the details of the initial PR
+ const initialPR = await octokit.pulls.get({
+ owner,
+ repo,
+ pull_number: initial_pr_number,
+ });
+
+ // Get all the PRs merged after the initial PR's merge date
+ const mergedPRs = await octokit.pulls.list({
+ owner,
+ repo,
+ state: 'closed',
+ sort: 'updated',
+ direction: 'desc',
+ });
+
+ const initialPRMergeDate = new Date(initialPR.data.merged_at);
+
+ // Filter the PRs that were merged after the initial PR
+ const mergedAfterInitialPR = mergedPRs.data.filter(pr => {
+ const prMergeDate = new Date(pr.merged_at);
+ return prMergeDate > initialPRMergeDate;
+ });
+
+ // Print the details of PRs merged after the initial PR
+ mergedAfterInitialPR.forEach(pr => {
+ try {
+ const changelog = parseChangelog(pr.body);
+ if (!changelog || changelog.changes.length === 0) {
+ console.log(`no changelog found for PR #${pr.number}`);
+ return;
+ }
+ const yml = changelogToYml(
+ changelog,
+ pr.user.login
+ );
+ console.log(`writing changelog for PR #${pr.number} to ../../html/changelogs/AutoChangeLog-pr-${pr.number}.yml`)
+ writeFileSync(`../../html/changelogs/AutoChangeLog-pr-${pr.number}.yml`, yml);
+ } catch (error) {
+ console.error(`Error processing PR #${pr.number}:`, error);
+ }
+ });
+ } catch (error) {
+ console.error('Error:', error.message);
+ }
+}
+
+get_merged_after();