diff --git a/Library/Homebrew/test/cask/audit_spec.rb b/Library/Homebrew/test/cask/audit_spec.rb
index db741fd133b9c3612ca1789e88ff44193be3a47e..6b0f9f4a38fded61155f3577a9242d5a731b1df4 100644
--- a/Library/Homebrew/test/cask/audit_spec.rb
+++ b/Library/Homebrew/test/cask/audit_spec.rb
@@ -17,15 +17,15 @@ describe Cask::Audit, :cask do
     end
   end
 
-  matcher :fail_with do |error_msg|
+  matcher :fail_with do |message|
     match do |audit|
-      include_msg?(audit.errors, error_msg)
+      include_msg?(audit.errors, message)
     end
   end
 
-  matcher :warn_with do |warning_msg|
+  matcher :warn_with do |message|
     match do |audit|
-      include_msg?(audit.warnings, warning_msg)
+      include_msg?(audit.warnings, message)
     end
   end
 
@@ -53,6 +53,10 @@ describe Cask::Audit, :cask do
       it "implies `strict`" do
         expect(audit).to be_strict
       end
+
+      it "implies `token_conflicts`" do
+        expect(audit.token_conflicts?).to be true
+      end
     end
 
     context "when `online` is specified" do
@@ -66,14 +70,6 @@ describe Cask::Audit, :cask do
         expect(audit.download).to be_truthy
       end
     end
-
-    context "when `strict` is specified" do
-      let(:strict) { true }
-
-      it "implies `token_conflicts`" do
-        expect(audit.token_conflicts?).to be true
-      end
-    end
   end
 
   describe "#result" do
@@ -152,78 +148,87 @@ describe Cask::Audit, :cask do
       context "when cask token is not lowercase" do
         let(:cask_token) { "Upper-Case" }
 
-        it "warns about lowercase" do
-          expect(subject).to warn_with(/token is not lowercase/)
+        it "fails" do
+          expect(subject).to fail_with(/lowercase/)
         end
       end
 
       context "when cask token is not ascii" do
         let(:cask_token) { "ascii鈱�" }
 
-        it "warns about ascii" do
-          expect(subject).to warn_with(/contains non-ascii characters/)
+        it "fails" do
+          expect(subject).to fail_with(/contains non-ascii characters/)
         end
       end
 
       context "when cask token has +" do
         let(:cask_token) { "app++" }
 
-        it "warns about +" do
-          expect(subject).to warn_with(/\+ should be replaced by -plus-/)
+        it "fails" do
+          expect(subject).to fail_with(/\+ should be replaced by -plus-/)
         end
       end
 
       context "when cask token has @" do
         let(:cask_token) { "app@stuff" }
 
-        it "warns about +" do
-          expect(subject).to warn_with(/@ should be replaced by -at-/)
+        it "fails" do
+          expect(subject).to fail_with(/@ should be replaced by -at-/)
         end
       end
 
       context "when cask token has whitespace" do
         let(:cask_token) { "app stuff" }
 
-        it "warns about whitespace" do
-          expect(subject).to warn_with(/whitespace should be replaced by hyphens/)
+        it "fails" do
+          expect(subject).to fail_with(/whitespace should be replaced by hyphens/)
         end
       end
 
       context "when cask token has underscores" do
         let(:cask_token) { "app_stuff" }
 
-        it "warns about underscores" do
-          expect(subject).to warn_with(/underscores should be replaced by hyphens/)
+        it "fails" do
+          expect(subject).to fail_with(/underscores should be replaced by hyphens/)
         end
       end
 
       context "when cask token has non-alphanumeric characters" do
         let(:cask_token) { "app(stuff)" }
 
-        it "warns about non-alphanumeric characters" do
-          expect(subject).to warn_with(/should only contain alphanumeric characters and hyphens/)
+        it "fails" do
+          expect(subject).to fail_with(/alphanumeric characters and hyphens/)
         end
       end
 
       context "when cask token has double hyphens" do
         let(:cask_token) { "app--stuff" }
 
-        it "warns about double hyphens" do
-          expect(subject).to warn_with(/should not contain double hyphens/)
+        it "fails" do
+          expect(subject).to fail_with(/should not contain double hyphens/)
+        end
+      end
+
+      context "when cask token has leading hyphens" do
+        let(:cask_token) { "-app" }
+
+        it "fails" do
+          expect(subject).to fail_with(/should not have leading or trailing hyphens/)
         end
       end
 
       context "when cask token has trailing hyphens" do
         let(:cask_token) { "app-" }
 
-        it "warns about trailing hyphens" do
-          expect(subject).to warn_with(/should not have leading or trailing hyphens/)
+        it "fails" do
+          expect(subject).to fail_with(/should not have leading or trailing hyphens/)
         end
       end
     end
 
     describe "token bad words" do
-      let(:strict) { true }
+      let(:new_cask) { true }
+      let(:online) { false }
       let(:cask) do
         tmp_cask cask_token.to_s, <<~RUBY
           cask '#{cask_token}' do
@@ -231,6 +236,7 @@ describe Cask::Audit, :cask do
             sha256 '8dd95daa037ac02455435446ec7bc737b34567afe9156af7d20b2a83805c1d8a'
             url "https://brew.sh/"
             name 'Audit'
+            desc 'Cask for testing tokens'
             homepage 'https://brew.sh/'
             app 'Audit.app'
           end
@@ -240,72 +246,72 @@ describe Cask::Audit, :cask do
       context "when cask token contains .app" do
         let(:cask_token) { "token.app" }
 
-        it "warns about .app" do
-          expect(subject).to warn_with(/token contains .app/)
+        it "fails" do
+          expect(subject).to fail_with(/token contains .app/)
         end
       end
 
       context "when cask token contains version designation" do
         let(:cask_token) { "token-beta" }
 
-        it "warns about version in token if the cask is from an official tap" do
+        it "fails if the cask is from an official tap" do
           allow(cask).to receive(:tap).and_return(Tap.fetch("homebrew/cask"))
 
-          expect(subject).to warn_with(/token contains version designation/)
+          expect(subject).to fail_with(/token contains version designation/)
         end
 
-        it "does not warn about version in token if the cask is from the `cask-versions` tap" do
+        it "does not fail if the cask is from the `cask-versions` tap" do
           allow(cask).to receive(:tap).and_return(Tap.fetch("homebrew/cask-versions"))
 
-          expect(subject).not_to warn_with(/token contains version designation/)
+          expect(subject).to pass
         end
       end
 
       context "when cask token contains launcher" do
         let(:cask_token) { "token-launcher" }
 
-        it "warns about launcher in token" do
-          expect(subject).to warn_with(/token mentions launcher/)
+        it "fails" do
+          expect(subject).to fail_with(/token mentions launcher/)
         end
       end
 
       context "when cask token contains desktop" do
         let(:cask_token) { "token-desktop" }
 
-        it "warns about desktop in token" do
-          expect(subject).to warn_with(/token mentions desktop/)
+        it "fails" do
+          expect(subject).to fail_with(/token mentions desktop/)
         end
       end
 
       context "when cask token contains platform" do
         let(:cask_token) { "token-osx" }
 
-        it "warns about platform in token" do
-          expect(subject).to warn_with(/token mentions platform/)
+        it "fails" do
+          expect(subject).to fail_with(/token mentions platform/)
         end
       end
 
       context "when cask token contains architecture" do
         let(:cask_token) { "token-x86" }
 
-        it "warns about architecture in token" do
-          expect(subject).to warn_with(/token mentions architecture/)
+        it "fails" do
+          expect(subject).to fail_with(/token mentions architecture/)
         end
       end
 
       context "when cask token contains framework" do
         let(:cask_token) { "token-java" }
 
-        it "warns about framework in token" do
-          expect(subject).to warn_with(/cask token mentions framework/)
+        it "fails" do
+          expect(subject).to fail_with(/cask token mentions framework/)
         end
       end
 
       context "when cask token is framework" do
         let(:cask_token) { "java" }
 
-        it "does not warn about framework" do
-          expect(subject).not_to warn_with(/token contains version/)
+        it "does not fail" do
+          expect(subject).to pass
         end
       end
     end
@@ -358,206 +364,206 @@ describe Cask::Audit, :cask do
     end
 
     describe "pkg allow_untrusted checks" do
-      let(:warning_msg) { "allow_untrusted is not permitted in official Homebrew Cask taps" }
+      let(:message) { "allow_untrusted is not permitted in official Homebrew Cask taps" }
 
       context "when the Cask has no pkg stanza" do
         let(:cask_token) { "basic-cask" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask does not have allow_untrusted" do
         let(:cask_token) { "with-uninstall-pkgutil" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has allow_untrusted" do
         let(:cask_token) { "with-allow-untrusted" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "when the Cask stanza requires uninstall" do
-      let(:warning_msg) { "installer and pkg stanzas require an uninstall stanza" }
+      let(:message) { "installer and pkg stanzas require an uninstall stanza" }
 
       context "when the Cask does not require an uninstall" do
         let(:cask_token) { "basic-cask" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the pkg Cask has an uninstall" do
         let(:cask_token) { "with-uninstall-pkgutil" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the installer Cask has an uninstall" do
         let(:cask_token) { "installer-with-uninstall" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the installer Cask does not have an uninstall" do
         let(:cask_token) { "with-installer-manual" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
 
       context "when the pkg Cask does not have an uninstall" do
         let(:cask_token) { "pkg-without-uninstall" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "preflight stanza checks" do
-      let(:warning_msg) { "only a single preflight stanza is allowed" }
+      let(:message) { "only a single preflight stanza is allowed" }
 
       context "when the Cask has no preflight stanza" do
         let(:cask_token) { "with-zap-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has only one preflight stanza" do
         let(:cask_token) { "with-preflight" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has multiple preflight stanzas" do
         let(:cask_token) { "with-preflight-multi" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
-    describe "uninstall_postflight stanza checks" do
-      let(:warning_msg) { "only a single postflight stanza is allowed" }
+    describe "postflight stanza checks" do
+      let(:message) { "only a single postflight stanza is allowed" }
 
       context "when the Cask has no postflight stanza" do
         let(:cask_token) { "with-zap-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has only one postflight stanza" do
         let(:cask_token) { "with-postflight" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has multiple postflight stanzas" do
         let(:cask_token) { "with-postflight-multi" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "uninstall stanza checks" do
-      let(:warning_msg) { "only a single uninstall stanza is allowed" }
+      let(:message) { "only a single uninstall stanza is allowed" }
 
       context "when the Cask has no uninstall stanza" do
         let(:cask_token) { "with-zap-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has only one uninstall stanza" do
         let(:cask_token) { "with-uninstall-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has multiple uninstall stanzas" do
         let(:cask_token) { "with-uninstall-multi" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "uninstall_preflight stanza checks" do
-      let(:warning_msg) { "only a single uninstall_preflight stanza is allowed" }
+      let(:message) { "only a single uninstall_preflight stanza is allowed" }
 
       context "when the Cask has no uninstall_preflight stanza" do
         let(:cask_token) { "with-zap-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has only one uninstall_preflight stanza" do
         let(:cask_token) { "with-uninstall-preflight" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has multiple uninstall_preflight stanzas" do
         let(:cask_token) { "with-uninstall-preflight-multi" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "uninstall_postflight stanza checks" do
-      let(:warning_msg) { "only a single uninstall_postflight stanza is allowed" }
+      let(:message) { "only a single uninstall_postflight stanza is allowed" }
 
       context "when the Cask has no uninstall_postflight stanza" do
         let(:cask_token) { "with-zap-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has only one uninstall_postflight stanza" do
         let(:cask_token) { "with-uninstall-postflight" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has multiple uninstall_postflight stanzas" do
         let(:cask_token) { "with-uninstall-postflight-multi" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "zap stanza checks" do
-      let(:warning_msg) { "only a single zap stanza is allowed" }
+      let(:message) { "only a single zap stanza is allowed" }
 
       context "when the Cask has no zap stanza" do
         let(:cask_token) { "with-uninstall-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has only one zap stanza" do
         let(:cask_token) { "with-zap-rmdir" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask has multiple zap stanzas" do
         let(:cask_token) { "with-zap-multi" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "version checks" do
-      let(:error_msg) { "you should use version :latest instead of version 'latest'" }
+      let(:message) { "you should use version :latest instead of version 'latest'" }
 
       context "when version is 'latest'" do
         let(:cask_token) { "version-latest-string" }
 
-        it { is_expected.to fail_with(error_msg) }
+        it { is_expected.to fail_with(message) }
       end
 
       context "when version is :latest" do
         let(:cask_token) { "version-latest-with-checksum" }
 
-        it { is_expected.not_to fail_with(error_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
     end
 
@@ -582,93 +588,93 @@ describe Cask::Audit, :cask do
     end
 
     describe "hosting with appcast checks" do
-      let(:appcast_warning) { /please add an appcast/ }
+      let(:message) { /please add an appcast/ }
 
       context "when the download does not use hosting with an appcast" do
         let(:cask_token) { "basic-cask" }
 
-        it { is_expected.not_to warn_with(appcast_warning) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the download uses GitHub releases and has an appcast" do
         let(:cask_token) { "github-with-appcast" }
 
-        it { is_expected.not_to warn_with(appcast_warning) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the download uses GitHub releases and does not have an appcast" do
         let(:cask_token) { "github-without-appcast" }
 
-        it { is_expected.to warn_with(appcast_warning) }
+        it { is_expected.to fail_with(message) }
       end
 
       context "when the download is hosted on SourceForge and has an appcast" do
         let(:cask_token) { "sourceforge-with-appcast" }
 
-        it { is_expected.not_to warn_with(appcast_warning) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the download is hosted on SourceForge and does not have an appcast" do
         let(:cask_token) { "sourceforge-correct-url-format" }
 
-        it { is_expected.to warn_with(appcast_warning) }
+        it { is_expected.to fail_with(message) }
       end
 
       context "when the download is hosted on DevMate and has an appcast" do
         let(:cask_token) { "devmate-with-appcast" }
 
-        it { is_expected.not_to warn_with(appcast_warning) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the download is hosted on DevMate and does not have an appcast" do
         let(:cask_token) { "devmate-without-appcast" }
 
-        it { is_expected.to warn_with(appcast_warning) }
+        it { is_expected.to fail_with(message) }
       end
 
       context "when the download is hosted on HockeyApp and has an appcast" do
         let(:cask_token) { "hockeyapp-with-appcast" }
 
-        it { is_expected.not_to warn_with(appcast_warning) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the download is hosted on HockeyApp and does not have an appcast" do
         let(:cask_token) { "hockeyapp-without-appcast" }
 
-        it { is_expected.to warn_with(appcast_warning) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "latest with appcast checks" do
-      let(:warning_msg) { "Casks with an appcast should not use version :latest" }
+      let(:message) { "Casks with an appcast should not use version :latest" }
 
       context "when the Cask is :latest and does not have an appcast" do
         let(:cask_token) { "version-latest" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask is versioned and has an appcast" do
         let(:cask_token) { "with-appcast" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "when the Cask is :latest and has an appcast" do
         let(:cask_token) { "latest-with-appcast" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "denylist checks" do
-      context "when the Cask isn't disallowed" do
+      context "when the Cask is not on the denylist" do
         let(:cask_token) { "adobe-air" }
 
         it { is_expected.to pass }
       end
 
-      context "when the Cask is disallowed" do
+      context "when the Cask is on the denylist" do
         context "and it's in the official Homebrew tap" do
           let(:cask_token) { "adobe-illustrator" }
 
@@ -684,64 +690,64 @@ describe Cask::Audit, :cask do
     end
 
     describe "latest with auto_updates checks" do
-      let(:warning_msg) { "Casks with `version :latest` should not use `auto_updates`" }
+      let(:message) { "Casks with `version :latest` should not use `auto_updates`" }
 
       context "when the Cask is :latest and does not have auto_updates" do
         let(:cask_token) { "version-latest" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.to pass }
       end
 
       context "when the Cask is versioned and does not have auto_updates" do
         let(:cask_token) { "basic-cask" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.to pass }
       end
 
       context "when the Cask is versioned and has auto_updates" do
         let(:cask_token) { "auto-updates" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.to pass }
       end
 
       context "when the Cask is :latest and has auto_updates" do
         let(:cask_token) { "latest-with-auto-updates" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
     end
 
     describe "preferred download URL formats" do
-      let(:warning_msg) { /URL format incorrect/ }
+      let(:message) { /URL format incorrect/ }
 
       context "with incorrect SourceForge URL format" do
         let(:cask_token) { "sourceforge-incorrect-url-format" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
 
       context "with correct SourceForge URL format" do
         let(:cask_token) { "sourceforge-correct-url-format" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "with correct SourceForge URL format for version :latest" do
         let(:cask_token) { "sourceforge-version-latest-correct-url-format" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
 
       context "with incorrect OSDN URL format" do
         let(:cask_token) { "osdn-incorrect-url-format" }
 
-        it { is_expected.to warn_with(warning_msg) }
+        it { is_expected.to fail_with(message) }
       end
 
       context "with correct OSDN URL format" do
         let(:cask_token) { "osdn-correct-url-format" }
 
-        it { is_expected.not_to warn_with(warning_msg) }
+        it { is_expected.not_to fail_with(message) }
       end
     end
 
@@ -793,7 +799,7 @@ describe Cask::Audit, :cask do
       context "when cask token does not conflict with a core formula" do
         let(:formula_names) { %w[other-formula] }
 
-        it { is_expected.not_to warn_with(/possible duplicate/) }
+        it { is_expected.to pass }
       end
     end
 
@@ -802,27 +808,28 @@ describe Cask::Audit, :cask do
       let(:cask) { Cask::CaskLoader.load(cask_token) }
       let(:download_double) { instance_double(Cask::Download) }
       let(:verify) { class_double(Cask::Verify).as_stubbed_const }
-      let(:error_msg) { "Download Failed" }
+      let(:message) { "Download Failed" }
 
       before do
         allow(audit).to receive(:download).and_return(download_double)
+        allow(audit).to receive(:check_https_availability)
       end
 
       it "when download and verification succeed it does not fail" do
         expect(download_double).to receive(:perform)
         expect(verify).to receive(:all)
-        expect(subject).not_to fail_with(/#{error_msg}/)
+        expect(subject).to pass
       end
 
-      it "when download fails it does not fail" do
-        expect(download_double).to receive(:perform).and_raise(StandardError.new(error_msg))
-        expect(subject).to fail_with(/#{error_msg}/)
+      it "when download fails it fails" do
+        expect(download_double).to receive(:perform).and_raise(StandardError.new(message))
+        expect(subject).to fail_with(/#{message}/)
       end
 
-      it "when verification fails it does not fail" do
+      it "when verification fails it fails" do
         expect(download_double).to receive(:perform)
-        expect(verify).to receive(:all).and_raise(StandardError.new(error_msg))
-        expect(subject).to fail_with(/#{error_msg}/)
+        expect(verify).to receive(:all).and_raise(StandardError.new(message))
+        expect(subject).to fail_with(/#{message}/)
       end
     end
 
@@ -853,16 +860,16 @@ describe Cask::Audit, :cask do
       context "when `new_cask` is true" do
         let(:new_cask) { true }
 
-        it "warns" do
-          expect(subject).to warn_with(/should have a description/)
+        it "fails" do
+          expect(subject).to fail_with(/should have a description/)
         end
       end
 
-      context "when `new_cask` is true" do
+      context "when `new_cask` is false" do
         let(:new_cask) { false }
 
-        it "does not warn" do
-          expect(subject).not_to warn_with(/should have a description/)
+        it "warns" do
+          expect(subject).to warn_with(/should have a description/)
         end
       end
     end
@@ -883,8 +890,8 @@ describe Cask::Audit, :cask do
         RUBY
       end
 
-      it "does not warn" do
-        expect(subject).not_to warn_with(/should have a description/)
+      it "passes" do
+        expect(subject).to pass
       end
     end
   end
diff --git a/Library/Homebrew/test/cask/cmd/cat_spec.rb b/Library/Homebrew/test/cask/cmd/cat_spec.rb
index 23dfa89f5b2d1487a263666fd420dd847c2ea0fa..b6a4d0f1840d701dce15003437b74a6eb18049f4 100644
--- a/Library/Homebrew/test/cask/cmd/cat_spec.rb
+++ b/Library/Homebrew/test/cask/cmd/cat_spec.rb
@@ -15,6 +15,8 @@ describe Cask::Cmd::Cat, :cask do
           sha256 "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
 
           url "https://brew.sh/TestCask.dmg"
+          name "Basic Cask"
+          desc "Cask for testing basic functionality"
           homepage "https://brew.sh/"
 
           app "TestCask.app"
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/adobe-air.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/adobe-air.rb
index 87f3b46d2e6bacab6ef59c71609588d72b9ddd43..770817c5e4730fdb9fa6b982aa4e52e66e008ed2 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/adobe-air.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/adobe-air.rb
@@ -3,7 +3,8 @@ cask "adobe-air" do
   sha256 "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
 
   url "https://brew.sh/TestCask.dmg"
-  name "Adobe Air"
+  name "Adobe AIR"
+  desc "Cross-platform application runtime"
   homepage "https://brew.sh/"
 
   app "TestCask.app"
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/auto-updates.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/auto-updates.rb
index 508b606709a7b9afd244283b0326d3ed0e87269e..35e1b2c9d56a0b0f0e4555175098ef801d4ca067 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/auto-updates.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/auto-updates.rb
@@ -3,6 +3,8 @@ cask "auto-updates" do
   sha256 "5633c3a0f2e572cbf021507dec78c50998b398c343232bdfc7e26221d0a5db4d"
 
   url "file://#{TEST_FIXTURE_DIR}/cask/MyFancyApp.zip"
+  name "Auto-Updates"
+  desc "Cask which auto-updates"
   homepage "https://brew.sh/MyFancyApp"
 
   auto_updates true
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/basic-cask.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/basic-cask.rb
index 08b1ea772377fbc3e5bbb1a65b14e8a302a2da1f..36b7d02b2754fb550dc22d5cdbc8a019fef77664 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/basic-cask.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/basic-cask.rb
@@ -3,6 +3,8 @@ cask "basic-cask" do
   sha256 "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
 
   url "https://brew.sh/TestCask.dmg"
+  name "Basic Cask"
+  desc "Cask for testing basic functionality"
   homepage "https://brew.sh/"
 
   app "TestCask.app"
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/latest-with-auto-updates.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/latest-with-auto-updates.rb
index e02a7f5aaad60dc10410ea69de05217677ce956f..bb650430e18e2bb72a1ab7df9d2133959f3e39ed 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/latest-with-auto-updates.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/latest-with-auto-updates.rb
@@ -3,6 +3,8 @@ cask "latest-with-auto-updates" do
   sha256 :no_check
 
   url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
+  name "Latest with Auto-Updates"
+  desc "Unversioned cask which auto-updates"
   homepage "https://brew.sh/latest-with-auto-updates"
 
   auto_updates true
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/pkg-without-uninstall.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/pkg-without-uninstall.rb
index a51c8ec886ea0062bd0dcf6cdb8dcc750a9b438c..b88c8066e5679ba496e12c0c9398af8a0e72b2f4 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/pkg-without-uninstall.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/pkg-without-uninstall.rb
@@ -3,6 +3,8 @@ cask "pkg-without-uninstall" do
   sha256 "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
 
   url "file://#{TEST_FIXTURE_DIR}/cask/MyFancyPkg.zip"
+  name "PKG without Uninstall"
+  desc "Cask with a package installer and no uninstall stanza"
   homepage "https://brew.sh/fancy-pkg"
 
   pkg "Fancy.pkg"
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/version-latest.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/version-latest.rb
index c4389c42530a2a79cf48053043ca641c1d4aead1..355856180e6a894b6a38517d84cedcd3b60d5a84 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/version-latest.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/version-latest.rb
@@ -3,6 +3,8 @@ cask "version-latest" do
   sha256 :no_check
 
   url "file://#{TEST_FIXTURE_DIR}/cask/caffeines.zip"
+  name "Version Latest"
+  desc "Unversioned cask"
   homepage "https://brew.sh/"
 
   app "Caffeine Mini.app"
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-binary.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-binary.rb
index 6915314edd25ff03934dbb8dcf5d7de66c48086c..831d4eacd526a3ee11fa5392ba2f6c5c9fa46cf3 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-binary.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-binary.rb
@@ -3,6 +3,8 @@ cask "with-binary" do
   sha256 "d5b2dfbef7ea28c25f7a77cd7fa14d013d82b626db1d82e00e25822464ba19e2"
 
   url "file://#{TEST_FIXTURE_DIR}/cask/AppWithBinary.zip"
+  name "With Binary"
+  desc "Cask with a binary stanza"
   homepage "https://brew.sh/with-binary"
 
   app "App.app"
diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-installer-manual.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-installer-manual.rb
index 7f7e9192ea18c561929cbb966efb77fd5857e848..5c9aab5fd38db6bef4ca3bc56542dd32c33ebf09 100644
--- a/Library/Homebrew/test/support/fixtures/cask/Casks/with-installer-manual.rb
+++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-installer-manual.rb
@@ -3,6 +3,8 @@ cask "with-installer-manual" do
   sha256 "67cdb8a02803ef37fdbf7e0be205863172e41a561ca446cd84f0d7ab35a99d94"
 
   url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
+  name "With Installer Manual"
+  desc "Cask with a manual installer"
   homepage "https://brew.sh/"
 
   installer manual: "Caffeine.app"
diff --git a/Library/Homebrew/test/support/fixtures/third-party/Casks/pharo.rb b/Library/Homebrew/test/support/fixtures/third-party/Casks/pharo.rb
index e6b6fef803cfc995ad1d14e5fb03ffb1015f0455..c37f700e92afd4cdaebae8ab16a72c86df63188e 100644
--- a/Library/Homebrew/test/support/fixtures/third-party/Casks/pharo.rb
+++ b/Library/Homebrew/test/support/fixtures/third-party/Casks/pharo.rb
@@ -4,6 +4,7 @@ cask "pharo" do
 
   url "https://brew.sh/ThirdParty.dmg"
   name "Pharo"
+  desc "Cask from a third-party tap"
   homepage "https://brew.sh/"
 
   app "ThirdParty.app"