diff --git a/History.rdoc b/History.rdoc
index 3d02b7c..1402fee 100644
--- a/History.rdoc
+++ b/History.rdoc
@@ -1,3 +1,28 @@
+=== 3.23.1 / 2022-01-04
+
+* 1 bug fix:
+
+  * Fixed loading config files for ruby 3.1's now default YAML.safe_load_file.
+
+=== 3.23.0 / 2021-05-29
+
+* 2 minor enhancements:
+
+  * Bump racc (plugin) dependency.
+  * Removed ruby18! and ruby19! methods. ugh
+
+=== 3.22.3 / 2021-01-10
+
+* 1 bug fix:
+
+  * Bumped ruby version to include < 4 (trunk).
+
+=== 3.22.2 / 2020-08-31
+
+* 1 bug fix:
+
+  * Bumped ruby version to include 3.0 (trunk).
+
 === 3.22.1 / 2020-02-12
 
 * 1 bug fix:
diff --git a/Rakefile b/Rakefile
index aa5e9c4..504827d 100644
--- a/Rakefile
+++ b/Rakefile
@@ -18,7 +18,7 @@ Hoe.spec "hoe" do
 
   pluggable!
   require_rubygems_version ">= 1.4"
-  require_ruby_version "~> 2.1"
+  require_ruby_version [">= 2.1", "< 4"]
 
   dependency "rake", [">= 0.8", "< 15.0"] # FIX: to force it to exist pre-isolate
 end
diff --git a/checksums.yaml.gz.sig b/checksums.yaml.gz.sig
index 345409c..5caf243 100644
Binary files a/checksums.yaml.gz.sig and b/checksums.yaml.gz.sig differ
diff --git a/data.tar.gz.sig b/data.tar.gz.sig
index 047baa0..74cd2b9 100644
Binary files a/data.tar.gz.sig and b/data.tar.gz.sig differ
diff --git a/hoe.gemspec b/hoe.gemspec
index 3bef46b..44a265f 100644
--- a/hoe.gemspec
+++ b/hoe.gemspec
@@ -2,18 +2,18 @@
 # This file has been automatically generated by gem2tgz #
 #########################################################
 # -*- encoding: utf-8 -*-
-# stub: hoe 3.22.1 ruby lib
+# stub: hoe 3.23.1 ruby lib
 
 Gem::Specification.new do |s|
   s.name = "hoe".freeze
-  s.version = "3.22.1"
+  s.version = "3.23.1"
 
   s.required_rubygems_version = Gem::Requirement.new(">= 1.4".freeze) if s.respond_to? :required_rubygems_version=
   s.metadata = { "bug_tracker_uri" => "https://github.com/seattlerb/hoe/issues", "changelog_uri" => "https://github.com/seattlerb/hoe/blob/master/History.rdoc", "documentation_uri" => "http://docs.seattlerb.org/hoe/Hoe.pdf", "homepage_uri" => "http://www.zenspider.com/projects/hoe.html", "source_code_uri" => "https://github.com/seattlerb/hoe" } if s.respond_to? :metadata=
   s.require_paths = ["lib".freeze]
   s.authors = ["Ryan Davis".freeze]
-  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDPjCCAiagAwIBAgIBBDANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu\nZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB\nGRYDY29tMB4XDTE5MTIxMzAwMDIwNFoXDTIwMTIxMjAwMDIwNFowRTETMBEGA1UE\nAwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS\nJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda\nb9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx\ntaCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT\noOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh\nGiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt\nqhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV\ngBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw\nHQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB\nAQCkkcHqAa6IKLYGl93rn78J3L+LnqyxaA059n4IGMHWN5bv9KBQnIjOrpLadtYZ\nvhWkunWDKdfVapBEq5+T4HzqnsEXC3aCv6JEKJY6Zw7iSzl0M8hozuzRr+w46wvT\nfV2yTN6QTVxqbMsJJyjosks4ZdQYov2zdvQpt1HsLi+Qmckmg8SPZsd+T8uiiBCf\nb+1ORSM5eEfBQenPXy83LZcoQz8i6zVB4aAfTGGdhxjoMGUEmSZ6xpkOzmnGa9QK\nm5x9IDiApM+vCELNwDXXGNFEnQBBK+wAe4Pek8o1V1TTOxL1kGPewVOitX1p3xoN\nh7iEjga8iM1LbZUfiISZ+WrB\n-----END CERTIFICATE-----\n".freeze]
-  s.date = "2020-02-13"
+  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDPjCCAiagAwIBAgIBBjANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu\nZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB\nGRYDY29tMB4XDTIxMTIyMzIzMTkwNFoXDTIyMTIyMzIzMTkwNFowRTETMBEGA1UE\nAwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS\nJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda\nb9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx\ntaCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT\noOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh\nGiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt\nqhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV\ngBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw\nHQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB\nAQCKB5jfsuSnKb+t/Wrh3UpdkmX7TrEsjVmERC0pPqzQ5GQJgmEXDD7oMgaKXaAq\nx2m+KSZDrqk7c8uho5OX6YMqg4KdxehfSLqqTZGoeV78qwf/jpPQZKTf+W9gUSJh\nzsWpo4K50MP+QtdSbKXZwjAafpQ8hK0MnnZ/aeCsW9ov5vdXpYbf3dpg6ADXRGE7\nlQY2y1tJ5/chqu6h7dQmnm2ABUqx9O+JcN9hbCYoA5i/EeubUEtFIh2w3SpO6YfB\nJFmxn4h9YO/pVdB962BdBNNDia0kgIjI3ENnkLq0dKpYU3+F3KhEuTksLO0L6X/V\nYsuyUzsMz6GQA4khyaMgKNSD\n-----END CERTIFICATE-----\n".freeze]
+  s.date = "2022-01-05"
   s.description = "Hoe is a rake/rubygems helper for project Rakefiles. It helps you\nmanage, maintain, and release your project and includes a dynamic\nplug-in system allowing for easy extensibility. Hoe ships with\nplug-ins for all your usual project tasks including rdoc generation,\ntesting, packaging, deployment, and announcement.\n\nSee class rdoc for help. Hint: `ri Hoe` or any of the plugins listed\nbelow.\n\nFor extra goodness, see: http://docs.seattlerb.org/hoe/Hoe.pdf".freeze
   s.email = ["ryand-ruby@zenspider.com".freeze]
   s.executables = ["sow".freeze]
@@ -22,22 +22,19 @@ Gem::Specification.new do |s|
   s.homepage = "http://www.zenspider.com/projects/hoe.html".freeze
   s.licenses = ["MIT".freeze]
   s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
-  s.required_ruby_version = Gem::Requirement.new("~> 2.1".freeze)
-  s.rubygems_version = "2.5.2.1".freeze
+  s.required_ruby_version = Gem::Requirement.new([">= 2.1".freeze, "< 4".freeze])
+  s.rubygems_version = "3.2.5".freeze
   s.summary = "Hoe is a rake/rubygems helper for project Rakefiles".freeze
 
   if s.respond_to? :specification_version then
     s.specification_version = 4
+  end
 
-    if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
-      s.add_runtime_dependency(%q<rake>.freeze, ["< 15.0", ">= 0.8"])
-      s.add_development_dependency(%q<rdoc>.freeze, ["< 7", ">= 4.0"])
-    else
-      s.add_dependency(%q<rake>.freeze, ["< 15.0", ">= 0.8"])
-      s.add_dependency(%q<rdoc>.freeze, ["< 7", ">= 4.0"])
-    end
+  if s.respond_to? :add_runtime_dependency then
+    s.add_runtime_dependency(%q<rake>.freeze, [">= 0.8", "< 15.0"])
+    s.add_development_dependency(%q<rdoc>.freeze, [">= 4.0", "< 7"])
   else
-    s.add_dependency(%q<rake>.freeze, ["< 15.0", ">= 0.8"])
-    s.add_dependency(%q<rdoc>.freeze, ["< 7", ">= 4.0"])
+    s.add_dependency(%q<rake>.freeze, [">= 0.8", "< 15.0"])
+    s.add_dependency(%q<rdoc>.freeze, [">= 4.0", "< 7"])
   end
 end
diff --git a/lib/hoe.rb b/lib/hoe.rb
index 6aec511..02880e2 100644
--- a/lib/hoe.rb
+++ b/lib/hoe.rb
@@ -87,7 +87,7 @@ class Hoe
   include Rake::DSL if defined?(Rake::DSL)
 
   # duh
-  VERSION = "3.22.1"
+  VERSION = "3.23.1"
 
   @@plugins = [:clean, :debug, :deps, :flay, :flog, :newb, :package,
                :publish, :gemcutter, :signing, :test]
@@ -475,7 +475,7 @@ class Hoe
 
     case name
     when "hoe" then
-      dependency "rake", [">= 0.8", "< 13.0"]
+      # do nothing? these deps are already in the hoe spec in the Rakefile
     else
       version = VERSION.split(/\./).first(2).join(".")
       dependency "hoe", "~> #{version}", :development
@@ -840,20 +840,6 @@ class Hoe
     spec_extras[:required_ruby_version] = versions
   end
 
-  ##
-  # Declare that this gem requires ruby to be in the 1.8+ family.
-
-  def ruby18!
-    require_ruby_version "~> 1.8"
-  end
-
-  ##
-  # Declare that this gem requires ruby to be in the 1.9 family.
-
-  def ruby19!
-    require_ruby_version "~> 1.9"
-  end
-
   ##
   # Declare that this gem requires ruby to be in the 2.0+ family.
 
@@ -882,6 +868,9 @@ class Hoe
     require_ruby_version "~> 2.3"
   end
 
+  # I don't care for these methods (eg 3.0 is out) ... so I'm not
+  # continuing them.
+
   ##
   # Provide a linear degrading value from n to m over start to finis
   # dates. If not provided, start and finis will default to 1/1 and
@@ -915,19 +904,29 @@ class Hoe
     config = Hoe::DEFAULT_CONFIG
 
     rc = File.expand_path("~/.hoerc")
-    exists = File.exist? rc
-    homeconfig = exists ? YAML.load_file(rc) : {}
+    homeconfig = maybe_load_yaml rc
 
     config = config.merge homeconfig
 
     localrc = File.join Dir.pwd, ".hoerc"
-    exists = File.exist? localrc
-    localconfig = exists ? YAML.load_file(localrc) : {}
+    localconfig = maybe_load_yaml(localrc)
 
     config = config.merge localconfig
 
     yield config, rc
   end
+
+  def maybe_load_yaml path
+    if File.exist? path then
+      if YAML.respond_to? :safe_load_file then
+        YAML.safe_load_file path, permitted_classes: [Regexp, Symbol]
+      else
+        YAML.load_file path
+      end
+    else
+      {}
+    end
+  end
 end
 
 class File
diff --git a/lib/hoe/publish.rb b/lib/hoe/publish.rb
index 06dda00..c5f34a8 100644
--- a/lib/hoe/publish.rb
+++ b/lib/hoe/publish.rb
@@ -145,7 +145,7 @@ module Hoe::Publish
 
     desc "Generate email announcement file."
     task :debug_email do
-      puts generate_email
+      puts generate_email ENV["FULL"]
     end
 
     desc 'Post announcement to blog. Uses the "blogs" array in your hoerc.'
diff --git a/lib/hoe/racc.rb b/lib/hoe/racc.rb
index 64f3db6..f11de00 100644
--- a/lib/hoe/racc.rb
+++ b/lib/hoe/racc.rb
@@ -50,7 +50,7 @@ module Hoe::Racc
   # Activate the racc dependencies
 
   def activate_racc_deps
-    dependency "racc", "~> 1.4.6", :development
+    dependency "racc", "~> 1.5", :development
   end
 
   ##
diff --git a/metadata.gz.sig b/metadata.gz.sig
index 9338449..d2bed2f 100644
--- a/metadata.gz.sig
+++ b/metadata.gz.sig
@@ -1,2 +1,4 @@
-�]Q�sl>(��̔�n؉��=��h��)&�KG�N��ٝ��o�}ё�������s�QS��3Cu�<��F8G���/f��q�I,_�`���'��Bf$��C�x�7����AH'<�h��ZF���+v<����?^g�T��Dw�fa��zB����/��<����z&�W(L�������o&�apn�T{
-���-=�A*��iH��b��~����)�e?X��JɃҿ��jQ�8��[�T�'h�u@Ù*>
\ No newline at end of file
+O��V|):�$���g�����B.�Dv�V��9ud�B^?IQI����d��o'���)�z� r��sE�����Q�}B
+��m^GI�ڔ6W�P.���8����T-
+yK��<����^w$v��r��C���M�M����S;}:��L ��H7$1�^�r��O��mt�]��P�}���Oe��ȍShA�����U�)�m�D[L
+:�X�]ϕ9&��:��~���uM�Ҝ�Z�/��F�5�L��ӧv
\ No newline at end of file
diff --git a/test/test_hoe_publish.rb b/test/test_hoe_publish.rb
index 756f2d2..2229ccf 100644
--- a/test/test_hoe_publish.rb
+++ b/test/test_hoe_publish.rb
@@ -14,6 +14,10 @@ class TestHoePublish < Minitest::Test
 
   make_my_diffs_pretty!
 
+  def linux? platform = RUBY_PLATFORM # TODO: push up to minitest?
+    /linux/ =~ platform
+  end
+
   def test_make_rdoc_cmd
     expected = %W[
                 #{Gem.ruby}
@@ -25,6 +29,7 @@ class TestHoePublish < Minitest::Test
                 History.rdoc Manifest.txt README.rdoc
                ]
 
+    skip if linux?
     assert_equal expected, @hoe.make_rdoc_cmd
   end
 end