diff --git a/CHANGES.txt b/CHANGES.txt
index 2e5a2707a7..f45dc9647d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -7,6 +7,13 @@
 NOTE: The 4.0.0 Release of SCons dropped Python 2.7 Support
 NOTE: 4.3.0 now requires Python 3.6.0 and above. Python 3.5.x is no longer supported
 
+RELEASE  VERSION/DATE TO BE FILLED IN LATER
+
+      From John Doe:
+
+        - Whatever John Doe did.
+
+
 RELEASE 4.6.0 -  Sun, 19 Nov 2023 17:22:20 -0700
 
   From Max Bachmann:
diff --git a/RELEASE.txt b/RELEASE.txt
index 26f1d5dc98..6bf0d09b1d 100644
--- a/RELEASE.txt
+++ b/RELEASE.txt
@@ -1,182 +1,65 @@
-A new SCons release, 4.6.0, is now available on the SCons download page:
+If you are reading this in the git repository, the contents
+refer to *unreleased* changes since the last SCons release.
+Past official release announcements appear at:
+
+    https://scons.org/tag/releases.html
+
+==================================================================
+
+A new SCons release, 4.6.1, is now available on the SCons download page:
 
     https://scons.org/pages/download.html
 
 
-Here is a summary of the changes since 4.5.2:
+Here is a summary of the changes since 4.6.0:
 
 NEW FUNCTIONALITY
 -----------------
 
-- D compilers : added support for generation of .di interface files.
-  New variables DI_FILE_DIR, DI_FILE_DIR_PREFIX, DI_FILE_DIR_SUFFIX,
-  DI_FILE_SUFFIX.
-- MSVC: If available, native arm64 tools will be used on arm64 hosts for VS2022.
-- MSVC: If necessary, automatically define VSCMD_SKIP_SENDTELEMETRY for VS2019 and later
-  on arm64 hosts when using an arm (32-bit) build of python to prevent a powershell
-  error pop-up window (powershell dll not found).
-- Add a LIBLITERALPREFIX variable which can be set to the linker's
-  prefix for considering a library argument unmodified (e.g. for the
-  GNU linker, the ':' in '-l:libfoo.a'). Fixes Github issue #3951.
+- List new features (presumably why a checkpoint is being released)
+
+DEPRECATED FUNCTIONALITY
+------------------------
 
+- List anything that's been deprecated since the last release
 
 CHANGED/ENHANCED EXISTING FUNCTIONALITY
 ---------------------------------------
 
-- When debugging (--debug=pdb), the filenames SConstruct and SConscript
-  are now recognized when manipulating breakpoints. Previously,
-  only a full pathname to an sconscript file worked, as pdb requires
-  a .py extension to open a file that is not an absolute path.
-- Three unused non-public methods of the Environment Base class
-  were dropped: get_src_sig_type, get_tgt_sig_type, _changed_source.
-  These were unused remnants of the previously removed SourceSignatures
-  and TargetSignatures features (dropped in 3.1.2).
-- The --debug flag now has a 'json' option which will write information
-  generated by --debug={count, memory, time, action-timestamps} and about
-  the build.
-- Obsoleted YACCVCGFILESUFFIX, it's being replaced by YACC_GRAPH_FILE_SUFFIX.
-  If YACC_GRAPH_FILE_SUFFIX is not set, it will respect YACCVCGFILESUFFIX.
-- The yacc tool now understands the bison behavior of --header, --defines
-  and --graph being called without an option-argument as being synonyms
-  for -d (first two) and -g. -H also recognized as a synonym for -d.
-  Default value for $YACC_GRAPH_FILE_SUFFIX changed to '.gv' to match
-  current bison default (since bison 3.8). Set this variable to '.dot'
-  if using byacc. Fixes #4326 and #4327.
-- MSVC: When trying to find a valid msvc batch file, the existence of the msvc compiler
-  executable is verified for VS6 to VS2015 to avoid executing the msvc batch file when
-  the host/target tool is known not to be present. Always check that the msvc compiler
-  executable is found on the msvc script environment path after running the msvc batch
-  file.  This is predominately needed for recent versions of Visual Studio where the msvc
-  batch file exists but an individual msvc toolset may not support the host/target
-  architecture combination.  For example, when using VS2022 on arm64, the arm64 native
-  tools are only installed for the 14.3x toolsets.
-- MSVC: When the msvc compiler executable is not found during setup of the msvc
-  environment, the warning message issued takes into account whether or not a
-  possibly erroneous compiler executable was already present in the scons environment
-  path.  See CHANGES.txt for details.
-- Extend range of recognized Java versions to 20.
-- Builder calls (like Program()) now accept pathlib objects in source lists.
-- The Help() function now takes an additional keyword argument keep_local:
-  when starting to build a help message, you can now retain help from AddOption
-  calls (options added for the project_, but omit help for SCons' own cmdline
-  options with "Help(newtext, append=True, local_only=True)".
-- Calling SConscript() with a nonexistent file is now an error.
-  Previously this succeeded - prior to SCons 3.0, silently; since 3.0, with
-  a warning. Developers can still instruct such an SConscript() call not
-  to fail by being explicit: pass keyword argument "must_exist=False".
-  The "--warn=missing-sconscript" commandline option is no longer available
-  as the warning was part of the transitional phase.
-- Add missing directories to searched paths for mingw installs
-- SCons.Util.types renamed to to SCons.Util.sctypes to avoid any possible
-  confusion with the Python stdlib "types" module. Note that it was briefly
-  (for 4.5.x only) possible to import directly from SCons.Util.types,
-  although the preferred usage remains to import from SCons.Util only.
-  Any code that did the direct import will have to change to import from
-  SCons.Util.sctypes.
-- Add JDK 21 LTS support
-- The newly added --debug=sconscript option (new) will output notices when
-  entering an exiting each SConscript as they are processed.
+- List modifications to existing features, where the previous behavior
+  wouldn't actually be considered a bug
 
 FIXES
 -----
 
-- Fixed: when using the mingw tool, if an msys2 Python is used (os.sep
-  is '/' rather than the Windows default '\'), certain Configure checks
-  could fail due to the construction of the path to run the compiled check.
-- C scanner's dictifyCPPDEFINES routine did not understand the possible
-  combinations of CPPDEFINES - not aware of a "name=value" string either
-  embedded in a sequence, or by itself.  The conditional C scanner thus
-  did not always properly apply the defines. The regular C scanner does
-  not use these, so was not affected.  [fixes #4193]
-- MSVC: The installed msvc list is calculated once and cached.  There was an indirect
-  dependency on the target architecture when determining if each version of msvc
-  was installed based on the initial invocation.  It was possible that an msvc instance
-  would not be considered installed due to the tools for the requested target
-  architecture not being installed.  The initial call to construct the installed msvc
-  list now uses an undefined target architecture to evaluate all potential host/target
-  combinations when evaluating if the msvc tools are installed for a given Visual Studio
-  installation.
-- MSVC: Erroneous construction of the installed msvc list (as described above) caused an
-  index error in the msvc support code.  An explicit check was added to prevent indexing
-  into an empty list.  Fixes #4312.
-- MSVC: The search for the msvc compiler executable (cl.exe) no longer inspects the
-  OS system path in certain situations when setting up the msvc environment.
-- MSCommon: Test SConfTests.py would fail when mscommon debugging was enabled via the
-  MSVC_MSCOMMON_DEBUG environment variable.  The mscommon logging filter class registered
-  with the python logging module was refactored to prevent test failure.
-- MSVS: Add arm64 to the MSVS supported architectures list for VS2017 and later to be
-  consistent with the current documentation of MSVS_ARCH.
-- FORTRAN: Fix gfortran tool initialization. Defaults to using binary named gfortran
-  as would be expected, and properly set's SHFORTRAN flags to include -fPIC
-  where previously it was only doing so for the other fortran versions (F77,..)
-- MSCommon: Added more error handling while reading msvc config cache.
-  (Enabled/specified by SCONS_CACHE_MSVC_CONFIG).
-  The existing cache will be discarded if there's a decode error reading it.
-  It's possible there's a race condition creating this issue it in certain CI builds.
-- Fixed: race condition in `Mkdir` which can happen when two `SConscript`
-  are processed simultaneously by two separate build commands.
+- List fixes of outright bugs
 
 IMPROVEMENTS
 ------------
 
-- Now tries to find mingw if it comes from Chocolatey install of msys2.
-- MSVC: Module imports were changed from a relative import to a top-level
-  absolute import in the following Microsoft tools: midl, mslib, mslink, mssdk, msvc,
-  msvs. Moving any of these tools that used relative imports to the scons site tools
-  folder would fail on import (i.e., the relative import paths become invalid when
-  moved).
+- List improvements that wouldn't be visible to the user in the
+  documentation:  performance improvements (describe the circumstances
+  under which they would be observed), or major code cleanups
 
 PACKAGING
 ---------
 
-- The build of scons now matches the help text displayed - the targets
-  listed there can all now be given as a target to build (except for
-  the two full source balls; the source tar.gz is currently generated directly
-  by the GitHub release process).
+- List changes in the way SCons is packaged and/or released
 
 DOCUMENTATION
 -------------
 
-- Aligned manpage signature for Alias function to match implementation -
-  if the previous *targets* parameter had been used as a keyword argument,
-  the results would be incorrect (does not apply to positional argument
-  usage, which had no problem).
-- Changed the message about scons -H to clarify it shows built-in options only.
-- Cachedir description updated.
-- Updated the first two chapters on building with SCons in the User Guide.
-- Clarify that exported variables are shared - if mutable, changes made in
-  an SConscript are visible everywhere that takes a refereence to that object.
-- Update PCH builder docs with some usage notes.
+- List any significant changes to the documentation (not individual
+  typo fixes, even if they're mentioned in src/CHANGES.txt to give
+  the contributor credit)
 
 DEVELOPMENT
 -----------
 
-- SCons test runner now uses pathlib to normalize and compare paths
-  to test files, which allows test lists, exclude lists, and tests on
-  the command line to "not care" about the OS convention for pathname
-  separators.
-- Class ActionBase is now an abstract base class to more accurately
-  reflect its usage. Derived _ActionAction inherits the ABC, so it
-  now declares (actually raises NotImplementedError) two methods it
-  doesn't use so it can be instantiated by unittests and others.
-- Added more type annotations to internal routines.
-- Cleaned up dblite module (checker warnings, etc.).
-- TeX tests: skip tests that use makeindex or epstopdf not installed, or
-  if `kpsewhich glossaries.sty` fails.
+- List visible changes in the way SCons is developed
 
 Thanks to the following contributors listed below for their contributions to this release.
 ==========================================================================================
 .. code-block:: text
 
-    git shortlog --no-merges -ns 4.5.2..HEAD
-        97  Mats Wichmann
-        39  William Deegan
-        20  Joseph Brill
-        12  Alex Burton
-         4  StenGruener
-         2  Jonathon Reinhart
-         2  LiuYinCarl
-         2  Max Bachmann
-         1  Kenshin
-         1  Shohei YOSHIDA
-         1  Vitaly Cheptsov
+    git shortlog --no-merges -ns 4.0.1..HEAD
diff --git a/ReleaseConfig b/ReleaseConfig
index 0974543581..7efd22933d 100755
--- a/ReleaseConfig
+++ b/ReleaseConfig
@@ -31,7 +31,7 @@
 # If the release type is not 'final', the patchlevel is set to the
 # release date.  This value is mandatory and must be present in this file.
 #version_tuple = (2, 2, 0, 'final', 0)
-version_tuple = (4,6,0)
+version_tuple = (4, 7, 0, 'a', 0)
 
 # Python versions prior to unsupported_python_version cause a fatal error
 # when that version is used.  Python versions prior to deprecate_python_version
diff --git a/SCons/__init__.py b/SCons/__init__.py
index 09eda03a30..7a7d3ef794 100644
--- a/SCons/__init__.py
+++ b/SCons/__init__.py
@@ -1,9 +1,9 @@
-__version__="4.6.0"
+__version__="4.6.1"
 __copyright__="Copyright (c) 2001 - 2023 The SCons Foundation"
 __developer__="bdbaddog"
-__date__="Sun, 19 Nov 2023 17:22:20 -0700"
+__date__="Sun, 19 Nov 2023 17:54:10 -0700"
 __buildsys__="M1Dog2021"
-__revision__="e5eef322a4a727b96358a436dca46e8085ac8692"
-__build__="e5eef322a4a727b96358a436dca46e8085ac8692"
+__revision__="70bcde6f38478a85a552ee624baaa2beb7b2bb92"
+__build__="70bcde6f38478a85a552ee624baaa2beb7b2bb92"
 # make sure compatibility is always in place
 import SCons.compat  # noqa
\ No newline at end of file
diff --git a/SConstruct b/SConstruct
index 472ae18935..98e1bd9462 100644
--- a/SConstruct
+++ b/SConstruct
@@ -36,7 +36,7 @@ copyright_years = strftime('2001 - %Y')
 # This gets inserted into the man pages to reflect the month of release.
 month_year = strftime('%B %Y')
 project = 'scons'
-default_version = '4.6.0'
+default_version = '4.6.1'
 copyright = f"Copyright (c) {copyright_years} The SCons Foundation"
 
 # We let the presence or absence of various utilities determine whether
diff --git a/doc/user/main.xml b/doc/user/main.xml
index de549a8bcb..2825dba266 100644
--- a/doc/user/main.xml
+++ b/doc/user/main.xml
@@ -54,7 +54,7 @@
 
     <corpauthor>The SCons Development Team</corpauthor>
 
-    <pubdate>Released: Mon, 21 Mar 2023 12:25:39 -0400</pubdate>
+    <pubdate>Released: Mon, 19 Nov 2023 17:52:53 -0700</pubdate>
 
     <copyright>
         <year>2004 - 2023</year>
diff --git a/testing/framework/TestSCons.py b/testing/framework/TestSCons.py
index 39a4245dbc..b6e34905cc 100644
--- a/testing/framework/TestSCons.py
+++ b/testing/framework/TestSCons.py
@@ -55,7 +55,7 @@
 # here provides some independent verification that what we packaged
 # conforms to what we expect.
 
-default_version = '4.5.3ayyyymmdd'
+default_version = '4.7.0ayyyymmdd'
 
 # TODO: these need to be hand-edited when there are changes
 python_version_unsupported = (3, 6, 0)