diff --git a/Cabal-syntax/ChangeLog.md b/Cabal-syntax/ChangeLog.md
index 58c8379eb44f9dae8a1e33c918d8bad30bde70b0..7706be32368685f60e3b2e18bdbe1031d8df2e97 100644
--- a/Cabal-syntax/ChangeLog.md
+++ b/Cabal-syntax/ChangeLog.md
@@ -1 +1 @@
-Please see See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.10.2.0.md
+Please see See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.10.3.0.md
diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md
index 34d046cc09849a3be4fc34f107f3249561c72e7e..08d6aa838dc10866935c9e2374e89e6130a678b5 100644
--- a/Cabal/ChangeLog.md
+++ b/Cabal/ChangeLog.md
@@ -1,3 +1,6 @@
+# 3.10.3.0 [Hécate](mailto:hecate+github@glitchbra.in) January 2024
+* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.10.3.0.md
+
 # 3.10.2.1 [Hécate](mailto:hecate+github@glitchbra.in) October 2023
 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.10.2.1.md
 
diff --git a/cabal-install-solver/ChangeLog.md b/cabal-install-solver/ChangeLog.md
index 7af34641df02dce657193207027c8b69871deb43..3bfdd653afe493a1774bf20667f118d1cff2ab0c 100644
--- a/cabal-install-solver/ChangeLog.md
+++ b/cabal-install-solver/ChangeLog.md
@@ -1 +1 @@
-Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.10.2.0.md
+Please see https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.10.3.0.md
diff --git a/cabal-install/changelog b/cabal-install/changelog
index 0a211ba0946ab66dda58205369ecfb613887f44f..3fe99c798e67572e0190a2db9b6b8f515ca4817c 100644
--- a/cabal-install/changelog
+++ b/cabal-install/changelog
@@ -1,6 +1,13 @@
 -*-change-log-*-
 
 3.10.2.0 Hécate <hecate+github@glitchbra.in> August 2023
+3.10.3.0 Hécate <hecate+github@glitchbra.in> January 2024
+	* See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.10.3.0.md
+
+3.10.2.1 Hécate <hecate+github@glitchbra.in> November 2023
+	* See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.10.2.1.md
+
+3.10.2.0 Hécate <hecate+github@glitchbra.in> November 2023
 	* See https://github.com/haskell/cabal/blob/master/release-notes/cabal-install-3.10.2.0.md
 
 3.10.1.0 Mikolaj Konarski <mikolaj@well-typed.com> March 2023
diff --git a/changelog.d/issue-6268 b/changelog.d/issue-6268
deleted file mode 100644
index cc78eecf884e5cb4efca0b51dc606f5ae7acee5a..0000000000000000000000000000000000000000
--- a/changelog.d/issue-6268
+++ /dev/null
@@ -1,19 +0,0 @@
-synopsis: Fix parsing of password-command option
-packages: cabal-install
-prs: #9002
-issuesa: #6268
-
-description: {
-
-The password-command option did not parse its value correctly.
-Quotes were ignored, making many kinds of commands impossible to
-express (e.g.  `sh -c "foo | bar"`).  Also, `cabal user-config`
-treated the argument list as a *list of option values*, rather than a
-*value that is a list*.  As a consequence, `cabal user-config
-update` corrupted the value in the config file.
-
-Fixed these issues by parsing the command as a space separated list
-of tokens (which may be enclosed in double quotes), and treating the
-parsed list-of-token as one value (not multiple).
-
-}
diff --git a/changelog.d/issue-8577 b/changelog.d/issue-8577
deleted file mode 100644
index b7890c261ba552d8f8be420326d6b256d258841d..0000000000000000000000000000000000000000
--- a/changelog.d/issue-8577
+++ /dev/null
@@ -1,13 +0,0 @@
-synopsis: Existence of $XDG_CONFIG_HOME/cabal/config now overrides existence of $HOME/.cabal
-packages: cabal-install
-issues: #8577
-
-description: {
-
-To avoid pre-XDG backwards compatibility from triggering due to other
-tools accidentally creating a $HOME/.cabal directory, the presence of
-$XDG_CONFIG_HOME/cabal/config now disables pre-XDG backwards
-compatibility.  Presumably $XDG_CONFIG_HOME/cabal/config will never be
-created by accident.
-
-}
diff --git a/changelog.d/issue-8841 b/changelog.d/issue-8841
deleted file mode 100644
index b0bc13c1bc256e7527d5e29ae8110e3d40f7dd52..0000000000000000000000000000000000000000
--- a/changelog.d/issue-8841
+++ /dev/null
@@ -1,15 +0,0 @@
-synopsis: Shorten script-builds paths
-packages: Cabal cabal-install
-prs: #8898
-issues: #8841
-
-description: {
-
-- Use Base64 hash truncated to 26 chars for script-build cache directories.
-- Use the cache directory as the dist directory.
-- Use script-<your-sanitized-script-name> as the component name instead of cabal-script-<...>.
-- Use cabal-script-<your-actual-script-name> for the executable name.
-- This change is incompatible with previous cabal versions in terms of cache location,
-  you should manually remove your old caches once you no longer need them.
-
-}
diff --git a/changelog.d/issue-8843 b/changelog.d/issue-8843
deleted file mode 100644
index fa1c93141fad7d9b8d81b6fa7b67c5cd2915b8f1..0000000000000000000000000000000000000000
--- a/changelog.d/issue-8843
+++ /dev/null
@@ -1,15 +0,0 @@
-synopsis: changes to haddock-project command
-
-packages: cabal-install
-prs: #8919
-issues: #8843 #8958
-description: {
-
-- cabal haddock-project by default creates self contained
-  documentation (formerly it required `--local` switch, which is removed).
-- `--gen-contents`, `--gen-index`, `--quickjump` and `--hyperlinked-source`
-  options where removed as they are always passed to haddock.
-- Fixes a bug which prevented to use `haddock-project` with
-  packages containing sublibraries.
-
-}
diff --git a/changelog.d/issue-8892 b/changelog.d/issue-8892
deleted file mode 100644
index 4e08b86494c97455cc5f27d382234b635c2e69ed..0000000000000000000000000000000000000000
--- a/changelog.d/issue-8892
+++ /dev/null
@@ -1,11 +0,0 @@
-synopsis: Regenerate Lexer.hs to avoid out-of-bound array access due to a bug in Alex
-packages: Cabal-syntax
-prs: #8896
-issues: #8892
-
-description: {
-
-- Regenerate Cabal-syntax's Lexer.hs with Alex 3.2.7.3 which includes a fix for
-  an out-of-bound array access (only noticeable with GHC's JavaScript backend).
-
-}
diff --git a/changelog.d/issue-8951 b/changelog.d/issue-8951
deleted file mode 100644
index 38bc8c7503b644cb153df8e94c00045c0ce156d9..0000000000000000000000000000000000000000
--- a/changelog.d/issue-8951
+++ /dev/null
@@ -1,3 +0,0 @@
-synopsis: Don't add `extra-prog-path: ~/.local/bin` when initially creating `~/.config/cabal/config`
-packages: cabal-install
-issues: #8951
diff --git a/changelog.d/issue-9122 b/changelog.d/issue-9122
deleted file mode 100644
index c8d82af1d8623521eda485b4249fbded5d37ce5a..0000000000000000000000000000000000000000
--- a/changelog.d/issue-9122
+++ /dev/null
@@ -1,4 +0,0 @@
-synopsis: Fix dependency on an external package when an internal library with the same name exists
-packages: Cabal
-issues: #9122
-prs: #9132
diff --git a/changelog.d/issue-9401 b/changelog.d/issue-9401
deleted file mode 100644
index 404879765438c2fac03a39bb0a6be22e48b310bc..0000000000000000000000000000000000000000
--- a/changelog.d/issue-9401
+++ /dev/null
@@ -1,11 +0,0 @@
-synopsis: Account for .buildinfo in repl, test, and bench
-packages: Cabal
-prs: #9440
-issues: #9401
-
-description: {
-
-Generated <project>.buildinfo is now respected in cabal repl, cabal test and cabal bench.
-
-}
-
diff --git a/changelog.d/pkgconfig-envvars b/changelog.d/pkgconfig-envvars
deleted file mode 100644
index 9b570693a4416a6a5310ee6be2371a53a02c3aaf..0000000000000000000000000000000000000000
--- a/changelog.d/pkgconfig-envvars
+++ /dev/null
@@ -1,8 +0,0 @@
-synopsis: PkgConfig environment variables
-prs: #9134
-
-description: {
-
-- `cabal` invokes `pkg-config` with `PKG_CONFIG_ALLOW_SYSTEM_CFLAGS` and `PKG_CONFIG_ALLOW_SYSTEM_LIBS` set
-
-}
diff --git a/changelog.d/pr-8819 b/changelog.d/pr-8819
deleted file mode 100644
index 1398a2ca648139a60503e355db596668f480e2c1..0000000000000000000000000000000000000000
--- a/changelog.d/pr-8819
+++ /dev/null
@@ -1,9 +0,0 @@
-synopsis: Use compiler flags for caching project config
-packages: cabal-install
-prs: #8819
-
-description: {
-
-This ensures that cached project configs with conditionals re-execute the conditional logic when the compiler changes.
-
-}
diff --git a/changelog.d/pr-8878 b/changelog.d/pr-8878
deleted file mode 100644
index af3dcce15de80b39839495edd3fb0e4ad4180c65..0000000000000000000000000000000000000000
--- a/changelog.d/pr-8878
+++ /dev/null
@@ -1,9 +0,0 @@
-synopsis: Fix default Nix configuration option in generated ~/.cabal/config file
-packages: cabal-install
-prs: #8878
-
-description: {
-
-Fixes the default for ~/.cabal/config file. The nix option should now be commented out by default.
-
-}
diff --git a/changelog.d/pr-8903 b/changelog.d/pr-8903
deleted file mode 100644
index 67b1bdb19ce8c72cda71b754501365a9a4c30e53..0000000000000000000000000000000000000000
--- a/changelog.d/pr-8903
+++ /dev/null
@@ -1,9 +0,0 @@
-synopsis: add base to cabal install --lib default env file
-packages: cabal-install
-prs: #8903
-
-description: {
-
-This adds base by default to the env file created by `cabal install --lib`. Further it ensures that packagedbs have been created before adding them to the env file.
-
-}
diff --git a/changelog.d/pr-9004 b/changelog.d/pr-9004
deleted file mode 100644
index 6ff9074647579498dbc18f90f835e376c7e5d653..0000000000000000000000000000000000000000
--- a/changelog.d/pr-9004
+++ /dev/null
@@ -1,11 +0,0 @@
-synopsis: Do not check PVP on internal targets
-packages: cabal-install
-prs: #9004
-issues: #8361
-
-description: {
-
-- `cabal check` will not check for dependencies upper bounds in internal
-  targets (i.e. test-suites and benchmarks)
-
-}
diff --git a/changelog.d/pr-9049 b/changelog.d/pr-9049
deleted file mode 100644
index 41fcd0a5bb73bda167c899596ffb3397785c89c2..0000000000000000000000000000000000000000
--- a/changelog.d/pr-9049
+++ /dev/null
@@ -1,13 +0,0 @@
-synopsis: Do not always pass --quickjump to haddock #9049
-packages: Cabal
-prs: #9049
-issues: #9060
-description: {
-
-6d8adf13101 caused `cabal` to always pass the `--quickjump` flag to Haddock.
-Not only does this waste memory for a service that user hasn't asked for,
-but also leads to a failure with Haddocks shipped with GHC 9.0 and 9.2,
-which had a separate bug (fixed in later versions but not backported) when
-Haddock does not pass `--quickjump` recursively to the package dependencies.
-
-}
diff --git a/changelog.d/pr-9068 b/changelog.d/pr-9068
deleted file mode 100644
index cd590c76e8555bdcc5e1543ece33080a36449bd7..0000000000000000000000000000000000000000
--- a/changelog.d/pr-9068
+++ /dev/null
@@ -1,12 +0,0 @@
-synopsis: Add new Hackage root keys to bootstrap set
-packages: cabal-install
-prs: #9068
-
-description: {
-
-The two new [Hackage root keyholders](https://github.com/haskell-infra/hackage-root-keys/tree/master/root-keys) were added to the bootstrap set.
-
-- Added Hackage root key for Joachim Breitner
-- Added Hackage root key for Mathieu Boespflug
-
-}
diff --git a/changelog.d/pr-9242 b/changelog.d/pr-9242
deleted file mode 100644
index dfabc5fd9829804f49887bdea3a54a448f1d904e..0000000000000000000000000000000000000000
--- a/changelog.d/pr-9242
+++ /dev/null
@@ -1,3 +0,0 @@
-synopsis: Support text-2.1 in Cabal and Cabal-syntax
-packages: Cabal Cabal-syntax
-prs: #9242
diff --git a/changelog.d/pr-9341 b/changelog.d/pr-9341
deleted file mode 100644
index dc6c65a802db4d7a2c5807d0e7a756e7985e0817..0000000000000000000000000000000000000000
--- a/changelog.d/pr-9341
+++ /dev/null
@@ -1,11 +0,0 @@
-synopsis: Fix run command environment
-packages: cabal-install
-prs: #9341
-issues: #8391
-
-description: {
-
-- The Run command will now add binary paths of dependencies
-  (build-tool-depends) to PATH, just like Exec and Test commands.
-
-}
\ No newline at end of file
diff --git a/changelog.d/pr-9391 b/changelog.d/pr-9391
deleted file mode 100644
index 517c94ed12751fcd64f85745c9a85547f968da0d..0000000000000000000000000000000000000000
--- a/changelog.d/pr-9391
+++ /dev/null
@@ -1,4 +0,0 @@
-synopsis: fix pkgconfig-depends for pkgconf-1.9
-packages: cabal-install-solver
-prs: #9391
-issues: #8923
diff --git a/changelog.d/pr-9609 b/changelog.d/pr-9609
deleted file mode 100644
index c156706ef0336b2c68477739e6b5e4d8e5cdf515..0000000000000000000000000000000000000000
--- a/changelog.d/pr-9609
+++ /dev/null
@@ -1,12 +0,0 @@
-synopsis: Ignore invalid Unicode in pkg-config descriptions
-packages: cabal-install-solver
-prs: #9609
-issues: #9608
-
-description: {
-
-Previously, cabal-install would crash when `pkg-config --list-all` contained
-invalid Unicode. With this change, invalid unicode in package descriptions is
-ignored, and unparseable package names are considered nonexistent.
-
-}
diff --git a/changelog.d/propagate-extra-prog-path b/changelog.d/propagate-extra-prog-path
deleted file mode 100644
index 9938736f7a159216870411736a719ed21bb0ea21..0000000000000000000000000000000000000000
--- a/changelog.d/propagate-extra-prog-path
+++ /dev/null
@@ -1,13 +0,0 @@
-synopsis: Fix extra-prog-path propagation
-packages: cabal-install Cabal
-prs: #9527
-issues: #7649 #9519
-
-description: {
-
-- extra-prog-paths are now propagated to all commands. This in particular helps
-  when running a MinGW cabal in the PowerShell, where the MSYS2 paths are
-  usually not available in the PowerShell PATH. GHCup already sets them up for
-  us but they were sometimes lost on the way.
-
-}
diff --git a/release-notes/Cabal-3.10.3.0.md b/release-notes/Cabal-3.10.3.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..3488616b9207033d9e38723711e8e2eea94a156c
--- /dev/null
+++ b/release-notes/Cabal-3.10.3.0.md
@@ -0,0 +1,15 @@
+Cabal and Cabal-syntax 3.10.3.0 changelog and release notes
+---
+
+## Release 3.10.3.0 is strictly a bug-fix release, with the fixes listed below
+
+- PkgConfig environment variables [#9134](https://github.com/haskell/cabal/pull/9134)
+  - `cabal` invokes `pkg-config` with `PKG_CONFIG_ALLOW_SYSTEM_CFLAGS` and `PKG_CONFIG_ALLOW_SYSTEM_LIBS` set
+
+- Support text-2.1 in Cabal and Cabal-syntax [#9242](https://github.com/haskell/cabal/pull/9242)
+
+- Fix extra-prog-path propagation [#7649](https://github.com/haskell/cabal/issues/7649) [#9519](https://github.com/haskell/cabal/issues/9519) [#9527](https://github.com/haskell/cabal/pull/9527)
+  - extra-prog-paths are now propagated to all commands. This in particular helps
+    when running a MinGW cabal in the PowerShell, where the MSYS2 paths are
+    usually not available in the PowerShell PATH. GHCup already sets them up for
+    us but they were sometimes lost on the way.
diff --git a/release-notes/cabal-install-3.10.3.0.md b/release-notes/cabal-install-3.10.3.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..f057eb4ca53ae10229df340c055f48decfd7350f
--- /dev/null
+++ b/release-notes/cabal-install-3.10.3.0.md
@@ -0,0 +1,45 @@
+cabal-install and cabal-install-solver 3.10.3.0 changelog and release notes
+---
+
+## Release 3.10.3.0 is strictly a bug-fix release, with the fixes listed below
+
+- PkgConfig individual calls [#9134](https://github.com/haskell/cabal/pull/9134)
+
+  - `cabal` invokes `pkg-config` individually for each lib if querying for all doesn't return the expected result
+
+- Use compiler flags for caching project config [#8819](https://github.com/haskell/cabal/pull/8819)
+
+  This ensures that cached project configs with conditionals re-execute the conditional logic when the compiler changes.
+
+- Make `check` recognise `TypeAbstractions` [#9496](https://github.com/haskell/cabal/issues/9496) [#9503](https://github.com/haskell/cabal/pull/9503)
+
+  - `cabal check` will not complain about “Unknown extension” when
+    finding `TypeAbstractions`.
+
+- `check`: add PackageInfo warning [#9331](https://github.com/haskell/cabal/issues/9331) [#9525](https://github.com/haskell/cabal/pull/9525)
+
+  `cabal check` will warn about PackageInfo_* modules and provide an upgrade path to 3.12.
+
+- Fix extra-prog-path propagation [#7649](https://github.com/haskell/cabal/issues/7649) [#9519](https://github.com/haskell/cabal/issues/9519) [#9527](https://github.com/haskell/cabal/pull/9527)
+
+  - extra-prog-paths are now propagated to all commands. This in particular helps
+    when running a MinGW cabal in the PowerShell, where the MSYS2 paths are
+    usually not available in the PowerShell PATH. GHCup already sets them up for
+    us but they were sometimes lost on the way.
+
+- fix pkgconfig-depends for pkgconf-1.9 [#8923](https://github.com/haskell/cabal/issues/8923) [#9391](https://github.com/haskell/cabal/pull/9391)
+
+- Ignore invalid Unicode in pkg-config descriptions [#9608](https://github.com/haskell/cabal/issues/9608) [#9609](https://github.com/haskell/cabal/pull/9609)
+
+  Previously, cabal-install would crash when `pkg-config --list-all` contained
+  invalid Unicode. With this change, invalid unicode in package descriptions is
+  ignored, and unparseable package names are considered nonexistent.
+
+- Script cache dir is the base16 hash of the canonical path of the script. [#9459](https://github.com/haskell/cabal/pull/9459)
+
+  Script cache dir is the base16 hash of the canonical path of the script.
+
+- Fix run command environment [#8391](https://github.com/haskell/cabal/issues/8391) [#9341](https://github.com/haskell/cabal/pull/9341)
+
+  - The Run command will now add binary paths of dependencies
+    (build-tool-depends) to PATH, just like Exec and Test commands.