Update documentation links (#10159)

Co-authored-by: hauntsaninja <>
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 67e7412..13aeab4 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -12,7 +12,7 @@
 
 If you haven't already, take a look at the project's
 [README.md file](README.md)
-and the [Mypy documentation](http://mypy.readthedocs.io/en/latest/),
+and the [Mypy documentation](https://mypy.readthedocs.io/en/latest/),
 and try adding type annotations to your file and type-checking it with Mypy.
 
 
diff --git a/mypy/errors.py b/mypy/errors.py
index a3fb761..ac82cc9 100644
--- a/mypy/errors.py
+++ b/mypy/errors.py
@@ -721,7 +721,8 @@
     # Print "INTERNAL ERROR" message.
     print('{}error: INTERNAL ERROR --'.format(prefix),
           'Please try using mypy master on Github:\n'
-          'https://mypy.rtfd.io/en/latest/common_issues.html#using-a-development-mypy-build',
+          'https://mypy.readthedocs.io/en/stable/common_issues.html'
+          '#using-a-development-mypy-build',
           file=stderr)
     if options.show_traceback:
         print('Please report a bug at https://github.com/python/mypy/issues',
diff --git a/mypy/main.py b/mypy/main.py
index 2e0c77d..40c5f39 100644
--- a/mypy/main.py
+++ b/mypy/main.py
@@ -248,17 +248,17 @@
 
 For more information on getting started, see:
 
-- http://mypy.readthedocs.io/en/latest/getting_started.html
+- https://mypy.readthedocs.io/en/stable/getting_started.html
 
 For more details on both running mypy and using the flags below, see:
 
-- http://mypy.readthedocs.io/en/latest/running_mypy.html
-- http://mypy.readthedocs.io/en/latest/command_line.html
+- https://mypy.readthedocs.io/en/stable/running_mypy.html
+- https://mypy.readthedocs.io/en/stable/command_line.html
 
 You can also use a config file to configure mypy instead of using
 command line flags. For more details, see:
 
-- http://mypy.readthedocs.io/en/latest/config_file.html
+- https://mypy.readthedocs.io/en/stable/config_file.html
 """  # type: Final
 
 FOOTER = """Environment variables:
@@ -557,7 +557,7 @@
         title='None and Optional handling',
         description="Adjust how values of type 'None' are handled. For more context on "
                     "how mypy handles values of type 'None', see: "
-                    "http://mypy.readthedocs.io/en/latest/kinds_of_types.html#no-strict-optional")
+                    "https://mypy.readthedocs.io/en/stable/kinds_of_types.html#no-strict-optional")
     add_invertible_flag('--no-implicit-optional', default=False, strict_flag=True,
                         help="Don't assume arguments with default values of None are Optional",
                         group=none_group)
@@ -668,7 +668,7 @@
                     "Mypy caches type information about modules into a cache to "
                     "let you speed up future invocations of mypy. Also see "
                     "mypy's daemon mode: "
-                    "mypy.readthedocs.io/en/latest/mypy_daemon.html#mypy-daemon")
+                    "mypy.readthedocs.io/en/stable/mypy_daemon.html#mypy-daemon")
     incremental_group.add_argument(
         '-i', '--incremental', action='store_true',
         help=argparse.SUPPRESS)
@@ -804,7 +804,7 @@
     code_group = parser.add_argument_group(
         title="Running code",
         description="Specify the code you want to type check. For more details, see "
-                    "mypy.readthedocs.io/en/latest/running_mypy.html#running-mypy")
+                    "mypy.readthedocs.io/en/stable/running_mypy.html#running-mypy")
     code_group.add_argument(
         '--explicit-package-bases', action='store_true',
         help="Use current directory and MYPYPATH to determine module names of files passed")
diff --git a/mypy/messages.py b/mypy/messages.py
index 0e54adb..db19a04 100644
--- a/mypy/messages.py
+++ b/mypy/messages.py
@@ -2077,7 +2077,7 @@
     if invariant_type and covariant_suggestion:
         notes.append(
             '"{}" is invariant -- see '.format(invariant_type) +
-            'http://mypy.readthedocs.io/en/latest/common_issues.html#variance')
+            "https://mypy.readthedocs.io/en/stable/common_issues.html#variance")
         notes.append(covariant_suggestion)
     return notes
 
diff --git a/mypy/modulefinder.py b/mypy/modulefinder.py
index f9ee370..0bae578 100644
--- a/mypy/modulefinder.py
+++ b/mypy/modulefinder.py
@@ -60,7 +60,7 @@
     STUBS_NOT_INSTALLED = 3
 
     def error_message_templates(self) -> Tuple[str, List[str]]:
-        doc_link = "See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports"
+        doc_link = "See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports"
         if self is ModuleNotFoundReason.NOT_FOUND:
             msg = 'Cannot find implementation or library stub for module named "{module}"'
             notes = [doc_link]
@@ -696,7 +696,7 @@
                 any(p.startswith(site_dir + os.path.sep) for p in mypypath) or
                 os.path.altsep and any(p.startswith(site_dir + os.path.altsep) for p in mypypath)):
             print("{} is in the MYPYPATH. Please remove it.".format(site_dir), file=sys.stderr)
-            print("See https://mypy.readthedocs.io/en/latest/running_mypy.html"
+            print("See https://mypy.readthedocs.io/en/stable/running_mypy.html"
                   "#how-mypy-handles-imports for more info", file=sys.stderr)
             sys.exit(1)
         elif site_dir in python_path:
diff --git a/mypy/typeanal.py b/mypy/typeanal.py
index 3554f63..8d86fe1 100644
--- a/mypy/typeanal.py
+++ b/mypy/typeanal.py
@@ -458,7 +458,7 @@
         notes = []  # type: List[str]
         if isinstance(sym.node, Var):
             notes.append('See https://mypy.readthedocs.io/en/'
-                         'latest/common_issues.html#variables-vs-type-aliases')
+                         'stable/common_issues.html#variables-vs-type-aliases')
             message = 'Variable "{}" is not valid as a type'
         elif isinstance(sym.node, (SYMBOL_FUNCBASE_TYPES, Decorator)):
             message = 'Function "{}" is not valid as a type'
@@ -1040,8 +1040,8 @@
                 # (string literal escaping) for classes not generic at runtime
                 note(
                     "Subscripting classes that are not generic at runtime may require "
-                    "escaping, see https://mypy.readthedocs.io/"
-                    "en/latest/common_issues.html#not-generic-runtime",
+                    "escaping, see https://mypy.readthedocs.io/en/stable/runtime_troubles.html"
+                    "#not-generic-runtime",
                     typ,
                     code=codes.TYPE_ARG)
 
diff --git a/test-data/unit/check-basic.test b/test-data/unit/check-basic.test
index 014bf4d..4fa77b1 100644
--- a/test-data/unit/check-basic.test
+++ b/test-data/unit/check-basic.test
@@ -409,7 +409,7 @@
 x: List[int]
 y: List[float]
 y = x # E: Incompatible types in assignment (expression has type "List[int]", variable has type "List[float]") \
-     # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+     # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
      # N: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/list.pyi]
 
@@ -418,7 +418,7 @@
 x: Dict[str, int]
 y: Dict[str, float]
 y = x # E: Incompatible types in assignment (expression has type "Dict[str, int]", variable has type "Dict[str, float]") \
-     # N: "Dict" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+     # N: "Dict" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
      # N: Consider using "Mapping" instead, which is covariant in the value type
 [builtins fixtures/dict.pyi]
 
diff --git a/test-data/unit/check-columns.test b/test-data/unit/check-columns.test
index f8a6442..43ff972 100644
--- a/test-data/unit/check-columns.test
+++ b/test-data/unit/check-columns.test
@@ -154,21 +154,21 @@
 bad = 0
 
 def f(x: bad): # E:10: Variable "__main__.bad" is not valid as a type \
-               # N:10: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+               # N:10: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
     y: bad # E:8: Variable "__main__.bad" is not valid as a type \
-           # N:8: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+           # N:8: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 if int():
     def g(x): # E:5: Variable "__main__.bad" is not valid as a type \
-              # N:5: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+              # N:5: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
         # type: (bad) -> None
         y = 0  # type: bad  # E:9: Variable "__main__.bad" is not valid as a type \
-                            # N:9: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                            # N:9: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 z: Iterable[bad] # E:13: Variable "__main__.bad" is not valid as a type \
-                 # N:13: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                 # N:13: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 h: bad[int] # E:4: Variable "__main__.bad" is not valid as a type \
-            # N:4: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+            # N:4: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testColumnInvalidType_python2]
 
@@ -178,13 +178,13 @@
 
 if int():
     def g(x): # E:5: Variable "__main__.bad" is not valid as a type \
-              # N:5: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+              # N:5: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
         # type: (bad) -> None
         y = 0  # type: bad  # E:9: Variable "__main__.bad" is not valid as a type \
-                            # N:9: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                            # N:9: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
     z = ()  # type: Iterable[bad] # E:5: Variable "__main__.bad" is not valid as a type \
-                                  # N:5: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                                  # N:5: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testColumnFunctionMissingTypeAnnotation]
 # flags: --disallow-untyped-defs
diff --git a/test-data/unit/check-custom-plugin.test b/test-data/unit/check-custom-plugin.test
index 9ab79ba..645ab50 100644
--- a/test-data/unit/check-custom-plugin.test
+++ b/test-data/unit/check-custom-plugin.test
@@ -498,13 +498,13 @@
 Bad2 = Bad3 = declarative_base()
 
 class C1(Bad1): ...  # E: Variable "__main__.Bad1" is not valid as a type \
-                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases \
+                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases \
                      # E: Invalid base class "Bad1"
 class C2(Bad2): ...  # E: Variable "__main__.Bad2" is not valid as a type \
-                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases \
+                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases \
                      # E: Invalid base class "Bad2"
 class C3(Bad3): ...  # E: Variable "__main__.Bad3" is not valid as a type \
-                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases \
+                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases \
                      # E: Invalid base class "Bad3"
 [file mod.py]
 from typing import Generic, TypeVar
diff --git a/test-data/unit/check-errorcodes.test b/test-data/unit/check-errorcodes.test
index a6fb2f4..800c33c 100644
--- a/test-data/unit/check-errorcodes.test
+++ b/test-data/unit/check-errorcodes.test
@@ -251,7 +251,7 @@
 import sys
 y: sys  # E: Module "sys" is not valid as a type  [valid-type]
 z: y  # E: Variable "__main__.y" is not valid as a type  [valid-type] \
-      # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+      # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 [builtins fixtures/tuple.pyi]
 
 [case testErrorCodeNeedTypeAnnotation]
@@ -500,7 +500,7 @@
 
 [case testErrorCodeMissingModule]
 from defusedxml import xyz  # E: Cannot find implementation or library stub for module named "defusedxml"  [import] \
-                            # N: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+                            # N: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 from nonexistent import foobar  # E: Cannot find implementation or library stub for module named "nonexistent"  [import]
 import nonexistent2  # E: Cannot find implementation or library stub for module named "nonexistent2"  [import]
 from nonexistent3 import *  # E: Cannot find implementation or library stub for module named "nonexistent3"  [import]
diff --git a/test-data/unit/check-flags.test b/test-data/unit/check-flags.test
index 400a67e..6a94ded 100644
--- a/test-data/unit/check-flags.test
+++ b/test-data/unit/check-flags.test
@@ -454,7 +454,7 @@
 from mod import x
 [out]
 main:1: error: Cannot find implementation or library stub for module named "mod"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testIgnoreMissingImportsTrue]
 # flags: --ignore-missing-imports
@@ -611,7 +611,7 @@
     pass
 [out]
 main:2: error: Cannot find implementation or library stub for module named "missing"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:4: error: Argument 1 to "f" becomes "Any" due to an unfollowed import
 
 [case testDisallowImplicitAnyVariableDefinition]
@@ -1122,9 +1122,9 @@
 y: Queue[int]
 
 p: Future  # E: Missing type parameters for generic type "Future" \
-           # N: Subscripting classes that are not generic at runtime may require escaping, see https://mypy.readthedocs.io/en/latest/common_issues.html#not-generic-runtime
+           # N: Subscripting classes that are not generic at runtime may require escaping, see https://mypy.readthedocs.io/en/stable/runtime_troubles.html#not-generic-runtime
 q: Queue  # E: Missing type parameters for generic type "Queue" \
-          # N: Subscripting classes that are not generic at runtime may require escaping, see https://mypy.readthedocs.io/en/latest/common_issues.html#not-generic-runtime
+          # N: Subscripting classes that are not generic at runtime may require escaping, see https://mypy.readthedocs.io/en/stable/runtime_troubles.html#not-generic-runtime
 [builtins fixtures/async_await.pyi]
 [typing fixtures/typing-full.pyi]
 
diff --git a/test-data/unit/check-functions.test b/test-data/unit/check-functions.test
index 2819f32..8e57ca2 100644
--- a/test-data/unit/check-functions.test
+++ b/test-data/unit/check-functions.test
@@ -2392,14 +2392,14 @@
 def f() -> List[Union[str, int]]:
     x = ['a']
     return x # E: Incompatible return value type (got "List[str]", expected "List[Union[str, int]]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant \
       # N: Perhaps you need a type annotation for "x"? Suggestion: "List[Union[str, int]]"
 
 def g() -> Dict[str, Union[str, int]]:
     x = {'a': 'a'}
     return x # E: Incompatible return value type (got "Dict[str, str]", expected "Dict[str, Union[str, int]]") \
-      # N: "Dict" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "Dict" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Mapping" instead, which is covariant in the value type \
       # N: Perhaps you need a type annotation for "x"? Suggestion: "Dict[str, Union[str, int]]"
 
@@ -2411,7 +2411,7 @@
 def i() -> List[Union[int, float]]:
     x: List[int] = [1]
     return x # E: Incompatible return value type (got "List[int]", expected "List[Union[int, float]]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant
 
 [builtins fixtures/dict.pyi]
diff --git a/test-data/unit/check-generics.test b/test-data/unit/check-generics.test
index 654f33c..220342b 100644
--- a/test-data/unit/check-generics.test
+++ b/test-data/unit/check-generics.test
@@ -986,10 +986,10 @@
     if int():
         c = int
     def f(self, x: a) -> None: pass  # E: Variable "__main__.C.a" is not valid as a type \
-                                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
     def g(self, x: b) -> None: pass
     def h(self, x: c) -> None: pass  # E: Variable "__main__.C.c" is not valid as a type \
-                                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
     x: b
     reveal_type(x)  # N: Revealed type is 'Union[builtins.int, builtins.str]'
 [out]
diff --git a/test-data/unit/check-incremental.test b/test-data/unit/check-incremental.test
index 053e033..6d2d7b5 100644
--- a/test-data/unit/check-incremental.test
+++ b/test-data/unit/check-incremental.test
@@ -2136,7 +2136,7 @@
 [stale]
 [out2]
 tmp/n.py:1: error: Cannot find implementation or library stub for module named "m"
-tmp/n.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+tmp/n.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testDeleteFileWithinCycle]
 import a
@@ -3434,7 +3434,7 @@
 
 [out2]
 main:2: error: Cannot find implementation or library stub for module named "a"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testIncrementalInheritanceAddAnnotation]
 # flags: --strict-optional
@@ -3577,7 +3577,7 @@
 [out]
 [out2]
 main:1: error: Cannot find implementation or library stub for module named "p.q"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 [out3]
 main:2: error: Missing positional argument "x" in call to "f"
 
@@ -4210,10 +4210,10 @@
 [builtins fixtures/module.pyi]
 [out]
 tmp/c.py:1: error: Cannot find implementation or library stub for module named "a.b.c"
-tmp/c.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+tmp/c.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 [out2]
 tmp/c.py:1: error: Cannot find implementation or library stub for module named "a.b.c"
-tmp/c.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+tmp/c.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testAddedMissingStubs]
 # flags: --ignore-missing-imports
diff --git a/test-data/unit/check-inference-context.test b/test-data/unit/check-inference-context.test
index c2f6d4e..94e7256 100644
--- a/test-data/unit/check-inference-context.test
+++ b/test-data/unit/check-inference-context.test
@@ -1324,7 +1324,7 @@
 # TODO: improve error message for such cases, see #3283 and #5706
 y: List[str] = f([]) \
  # E: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "List[str]") \
- # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+ # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
  # N: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/list.pyi]
 
@@ -1346,7 +1346,7 @@
 
 y: List[str] = f()  \
       # E: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "List[str]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/list.pyi]
 
diff --git a/test-data/unit/check-inference.test b/test-data/unit/check-inference.test
index c21b81f..1b198f6 100644
--- a/test-data/unit/check-inference.test
+++ b/test-data/unit/check-inference.test
@@ -1333,7 +1333,7 @@
 if int():
     a = x3 \
      # E: Incompatible types in assignment (expression has type "List[B]", variable has type "List[A]") \
-     # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+     # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
      # N: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/list.pyi]
 [typing fixtures/typing-medium.pyi]
@@ -1356,7 +1356,7 @@
 if int():
     a = x3 \
      # E: Incompatible types in assignment (expression has type "List[B]", variable has type "List[A]") \
-     # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+     # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
      # N: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/list.pyi]
 [typing fixtures/typing-medium.pyi]
diff --git a/test-data/unit/check-literal.test b/test-data/unit/check-literal.test
index a47d05d..a83df1f 100644
--- a/test-data/unit/check-literal.test
+++ b/test-data/unit/check-literal.test
@@ -707,7 +707,7 @@
 
 NotAType = 3
 def f() -> NotAType['also' + 'not' + 'a' + 'type']: ... # E: Variable "__main__.NotAType" is not valid as a type \
-                                                        # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases \
+                                                        # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases \
                                                         # E: Invalid type comment or annotation
 
 # Note: this makes us re-inspect the type (e.g. via '_patch_indirect_dependencies'
@@ -868,7 +868,7 @@
 from typing import Any
 from typing_extensions import Literal
 from missing_module import BadAlias     # E: Cannot find implementation or library stub for module named "missing_module" \
-                                        # N: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+                                        # N: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 a: Literal[Any]                         # E: Parameter 1 of Literal[...] cannot be of type "Any"
 b: Literal[BadAlias]                    # E: Parameter 1 of Literal[...] cannot be of type "Any"
@@ -909,11 +909,11 @@
 a2: a2t
 reveal_type(a2)      # N: Revealed type is 'Any'
 b2: b2t              # E: Variable "__main__.b2t" is not valid as a type \
-                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 c2: c2t
 reveal_type(c2)      # N: Revealed type is 'Any'
 d2: d2t              # E: Variable "__main__.d2t" is not valid as a type \
-                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 [builtins fixtures/complex_tuple.pyi]
 [out]
 
@@ -953,9 +953,9 @@
 at = Literal[{"a": 1, "b": 2}]  # E: Invalid type alias: expression is not a valid type
 bt = {"a": 1, "b": 2}
 a: at                           # E: Variable "__main__.at" is not valid as a type \
-                                # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                                # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 b: bt                           # E: Variable "__main__.bt" is not valid as a type \
-                                # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                                # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 [builtins fixtures/dict.pyi]
 [out]
 
@@ -965,9 +965,9 @@
 at = Literal[{1, 2, 3}]         # E: Invalid type alias: expression is not a valid type
 bt = {1, 2, 3}
 a: at                           # E: Variable "__main__.at" is not valid as a type \
-                                # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                                # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 b: bt                           # E: Variable "__main__.bt" is not valid as a type \
-                                # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                                # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 [builtins fixtures/set.pyi]
 [out]
 
@@ -1276,7 +1276,7 @@
 b: List[Literal[1, 2, 3]]
 
 foo(a)  # E: Argument 1 to "foo" has incompatible type "List[Literal[1]]"; expected "List[Union[Literal[1], Literal[2]]]" \
-        # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+        # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
         # N: Consider using "Sequence" instead, which is covariant
 foo(b)  # E: Argument 1 to "foo" has incompatible type "List[Union[Literal[1], Literal[2], Literal[3]]]"; expected "List[Union[Literal[1], Literal[2]]]"
 bar(a)
@@ -2874,16 +2874,16 @@
 # at least case "b" for consistency?
 a_wrap: Literal[4, a]  # E: Parameter 2 of Literal[...] is invalid \
                        # E: Variable "__main__.a" is not valid as a type \
-                       # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                       # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 b_wrap: Literal[4, b]  # E: Parameter 2 of Literal[...] is invalid \
                        # E: Variable "__main__.b" is not valid as a type \
-                       # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                       # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 c_wrap: Literal[4, c]  # E: Parameter 2 of Literal[...] is invalid \
                        # E: Variable "__main__.c" is not valid as a type \
-                       # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                       # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 d_wrap: Literal[4, d]  # E: Parameter 2 of Literal[...] is invalid \
                        # E: Variable "__main__.d" is not valid as a type \
-                       # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                       # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 [builtins fixtures/tuple.pyi]
 [out]
 
diff --git a/test-data/unit/check-modules.test b/test-data/unit/check-modules.test
index 630f05b..b2e10ba 100644
--- a/test-data/unit/check-modules.test
+++ b/test-data/unit/check-modules.test
@@ -209,7 +209,7 @@
 None + ''
 [out]
 main:1: error: Cannot find implementation or library stub for module named "nonexistent"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Unsupported left operand type for + ("None")
 
 [case testTypeCheckWithUnknownModule2]
@@ -221,7 +221,7 @@
 x = 1
 [out]
 main:1: error: Cannot find implementation or library stub for module named "nonexistent"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Unsupported left operand type for + ("None")
 main:4: error: Incompatible types in assignment (expression has type "str", variable has type "int")
 
@@ -234,7 +234,7 @@
 x = 1
 [out]
 main:1: error: Cannot find implementation or library stub for module named "nonexistent"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Unsupported left operand type for + ("None")
 main:4: error: Incompatible types in assignment (expression has type "str", variable has type "int")
 
@@ -243,7 +243,7 @@
 None + ''
 [out]
 main:1: error: Cannot find implementation or library stub for module named "nonexistent"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "another"
 main:2: error: Unsupported left operand type for + ("None")
 
@@ -252,7 +252,7 @@
 None + ''
 [out]
 main:1: error: Cannot find implementation or library stub for module named "nonexistent"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Unsupported left operand type for + ("None")
 
 [case testTypeCheckWithUnknownModuleUsingFromImport]
@@ -260,7 +260,7 @@
 None + ''
 [out]
 main:1: error: Cannot find implementation or library stub for module named "nonexistent"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Unsupported left operand type for + ("None")
 
 [case testTypeCheckWithUnknownModuleUsingImportStar]
@@ -268,7 +268,7 @@
 None + ''
 [out]
 main:1: error: Cannot find implementation or library stub for module named "nonexistent"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Unsupported left operand type for + ("None")
 
 [case testAccessingUnknownModule]
@@ -277,7 +277,7 @@
 xyz()
 [out]
 main:1: error: Cannot find implementation or library stub for module named "xyz"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testAccessingUnknownModule2]
 import xyz, bar
@@ -285,7 +285,7 @@
 bar()
 [out]
 main:1: error: Cannot find implementation or library stub for module named "xyz"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "bar"
 
 [case testAccessingUnknownModule3]
@@ -294,7 +294,7 @@
 z()
 [out]
 main:1: error: Cannot find implementation or library stub for module named "xyz"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Name 'xyz' is not defined
 
 [case testAccessingNameImportedFromUnknownModule]
@@ -303,14 +303,14 @@
 z()
 [out]
 main:1: error: Cannot find implementation or library stub for module named "xyz"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testAccessingNameImportedFromUnknownModule2]
 from xyz import *
 y
 [out]
 main:1: error: Cannot find implementation or library stub for module named "xyz"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Name 'y' is not defined
 
 [case testAccessingNameImportedFromUnknownModule3]
@@ -319,13 +319,13 @@
 z
 [out]
 main:1: error: Cannot find implementation or library stub for module named "xyz"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Name 'y' is not defined
 
 [case testUnknownModuleRedefinition]
 # Error messages differ with the new analyzer
 
-import xab  # E: Cannot find implementation or library stub for module named "xab"  # N: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+import xab  # E: Cannot find implementation or library stub for module named "xab"  # N: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 def xab(): pass  # E: Name 'xab' already defined (possibly by an import)
 
 [case testAccessingUnknownModuleFromOtherModule]
@@ -337,7 +337,7 @@
 [builtins fixtures/module.pyi]
 [out]
 tmp/x.py:1: error: Cannot find implementation or library stub for module named "nonexistent"
-tmp/x.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+tmp/x.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:3: error: Module has no attribute "z"
 
 [case testUnknownModuleImportedWithinFunction]
@@ -347,7 +347,7 @@
 foobar('')
 [out]
 main:2: error: Cannot find implementation or library stub for module named "foobar"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:4: error: Too many arguments for "foobar"
 
 [case testUnknownModuleImportedWithinFunction2]
@@ -357,7 +357,7 @@
 x('')
 [out]
 main:2: error: Cannot find implementation or library stub for module named "foobar"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:4: error: Too many arguments for "x"
 
 [case testRelativeImports]
@@ -2182,7 +2182,7 @@
 -- TODO: it would be better for this to be in the other order
 tmp/b.py:1: error: Cannot find implementation or library stub for module named "c"
 main:1: error: Cannot find implementation or library stub for module named "c"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testIndirectFromImportWithinCycle1]
 import a
@@ -2314,7 +2314,7 @@
 [builtins fixtures/module.pyi]
 [out]
 main:1: error: Cannot find implementation or library stub for module named "a.b"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testModuleGetattrInit4]
 import a.b.c
@@ -2359,11 +2359,11 @@
 [builtins fixtures/module.pyi]
 [out]
 main:1: error: Cannot find implementation or library stub for module named "a.b.c.d"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "a.b.c"
 
 [case testModuleGetattrInit8a]
-import a.b.c  # E: Cannot find implementation or library stub for module named "a.b.c"  # N: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+import a.b.c  # E: Cannot find implementation or library stub for module named "a.b.c"  # N: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 import a.d  # OK
 [file a/__init__.pyi]
 from typing import Any
@@ -2390,7 +2390,7 @@
 [builtins fixtures/module.pyi]
 [out]
 main:3: error: Cannot find implementation or library stub for module named "a.b.d"
-main:3: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testIndirectFromImportWithinCycleUsedAsBaseClass]
 import a
@@ -2622,7 +2622,7 @@
 x = 0
 [out]
 main:1: error: Cannot find implementation or library stub for module named "foo.bar"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testNamespacePackage]
 # flags: --namespace-packages
@@ -2824,4 +2824,4 @@
 
 [out]
 tmp/stub.pyi:1: error: Cannot find implementation or library stub for module named "mystery"
-tmp/stub.pyi:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+tmp/stub.pyi:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
diff --git a/test-data/unit/check-optional.test b/test-data/unit/check-optional.test
index 74a2709..8d05459 100644
--- a/test-data/unit/check-optional.test
+++ b/test-data/unit/check-optional.test
@@ -829,6 +829,6 @@
 strict_optional = False
 [out]
 main:4: error: Argument 1 to "asdf" has incompatible type "List[str]"; expected "List[Optional[str]]"
-main:4: note: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance
+main:4: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
 main:4: note: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/list.pyi]
diff --git a/test-data/unit/check-overloading.test b/test-data/unit/check-overloading.test
index 05db459..87a8d76 100644
--- a/test-data/unit/check-overloading.test
+++ b/test-data/unit/check-overloading.test
@@ -1370,7 +1370,7 @@
 main:19: note: Revealed type is 'Any'
 main:20: note: Revealed type is 'Union[builtins.int, builtins.str]'
 main:21: error: Argument 1 to "foo" has incompatible type "List[bool]"; expected "List[int]"
-main:21: note: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance
+main:21: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
 main:21: note: Consider using "Sequence" instead, which is covariant
 main:22: error: Argument 1 to "foo" has incompatible type "List[object]"; expected "List[int]"
 main:23: error: Argument 1 to "foo" has incompatible type "List[Union[int, str]]"; expected "List[int]"
diff --git a/test-data/unit/check-python38.test b/test-data/unit/check-python38.test
index 1cdd661..c9322bb 100644
--- a/test-data/unit/check-python38.test
+++ b/test-data/unit/check-python38.test
@@ -278,11 +278,11 @@
     # Just make sure we don't crash on this sort of thing.
     if NT := NamedTuple("NT", [("x", int)]):  # E: "int" not callable
         z2: NT  # E: Variable "NT" is not valid as a type \
-                # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
     if Alias := int:
         z3: Alias  # E: Variable "Alias" is not valid as a type \
-                   # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                   # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
     if (reveal_type(y9 := 3) and   # N: Revealed type is 'Literal[3]?'
             reveal_type(y9)):       # N: Revealed type is 'builtins.int'
diff --git a/test-data/unit/check-redefine.test b/test-data/unit/check-redefine.test
index d5f453c..e67e440 100644
--- a/test-data/unit/check-redefine.test
+++ b/test-data/unit/check-redefine.test
@@ -277,7 +277,7 @@
     y = TypeVar('y')  # E: Cannot redefine 'y' as a type variable \
                       # E: "int" not callable
     def h(a: y) -> y: return a # E: Variable "y" is not valid as a type \
-                               # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                               # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testCannotRedefineVarAsModule]
 # flags: --allow-redefinition
diff --git a/test-data/unit/check-semanal-error.test b/test-data/unit/check-semanal-error.test
index 73d3ac7..c25fd07 100644
--- a/test-data/unit/check-semanal-error.test
+++ b/test-data/unit/check-semanal-error.test
@@ -19,7 +19,7 @@
 1() # E
 [out]
 main:1: error: Cannot find implementation or library stub for module named "m"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:4: error: "int" not callable
 
 [case testMissingModuleImport2]
@@ -29,7 +29,7 @@
 1() # E
 [out]
 main:1: error: Cannot find implementation or library stub for module named "m"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:4: error: "int" not callable
 
 [case testMissingModuleImport3]
@@ -38,7 +38,7 @@
 1() # E
 [out]
 main:1: error: Cannot find implementation or library stub for module named "m"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Name 'x' is not defined
 main:3: error: "int" not callable
 
@@ -57,7 +57,7 @@
 A().x = '' # E
 [out]
 main:3: error: Variable "__main__.X" is not valid as a type
-main:3: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+main:3: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 main:3: error: Invalid base class "X"
 main:6: error: Incompatible types in assignment (expression has type "str", variable has type "int")
 
diff --git a/test-data/unit/check-type-aliases.test b/test-data/unit/check-type-aliases.test
index cab61d7..698c8bb 100644
--- a/test-data/unit/check-type-aliases.test
+++ b/test-data/unit/check-type-aliases.test
@@ -100,9 +100,9 @@
 if int():
     A = float  # OK
 x: A  # E: Variable "__main__.A" is not valid as a type \
-      # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+      # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 def bad(tp: A) -> None:  # E: Variable "__main__.A" is not valid as a type \
-                         # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                         # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
     pass
 
 Alias = int
diff --git a/test-data/unit/check-typevar-values.test b/test-data/unit/check-typevar-values.test
index fbdd1ba..a915701 100644
--- a/test-data/unit/check-typevar-values.test
+++ b/test-data/unit/check-typevar-values.test
@@ -21,7 +21,7 @@
     s = f('')
     o = f(1) \
       # E: Incompatible types in assignment (expression has type "List[int]", variable has type "List[object]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/list.pyi]
 
diff --git a/test-data/unit/check-unions.test b/test-data/unit/check-unions.test
index a785b28..0eaba1a 100644
--- a/test-data/unit/check-unions.test
+++ b/test-data/unit/check-unions.test
@@ -1021,7 +1021,7 @@
 
 boop: List[Boop] = []
 do_thing_with_enums(boop)  # E: Argument 1 to "do_thing_with_enums" has incompatible type "List[Boop]"; expected "Union[List[Enum], Enum]" \
-                           # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+                           # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
                            # N: Consider using "Sequence" instead, which is covariant
 [builtins fixtures/isinstancelist.pyi]
 
diff --git a/test-data/unit/check-unreachable-code.test b/test-data/unit/check-unreachable-code.test
index d01088a..6772a74 100644
--- a/test-data/unit/check-unreachable-code.test
+++ b/test-data/unit/check-unreachable-code.test
@@ -79,7 +79,7 @@
 [builtins fixtures/bool.pyi]
 [out]
 main:6: error: Cannot find implementation or library stub for module named "pow123"
-main:6: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:6: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testMypyConditional]
 import typing
@@ -99,7 +99,7 @@
 [typing fixtures/typing-medium.pyi]
 [out]
 main:3: error: Cannot find implementation or library stub for module named "pow123"
-main:3: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testTypeCheckingConditionalFromImport]
 from typing import TYPE_CHECKING
@@ -110,7 +110,7 @@
 [typing fixtures/typing-medium.pyi]
 [out]
 main:3: error: Cannot find implementation or library stub for module named "pow123"
-main:3: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testNegatedTypeCheckingConditional]
 import typing
@@ -122,7 +122,7 @@
 [typing fixtures/typing-medium.pyi]
 [out]
 main:5: error: Cannot find implementation or library stub for module named "xyz753"
-main:5: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:5: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testUndefinedTypeCheckingConditional]
 if not TYPE_CHECKING: # E
@@ -133,7 +133,7 @@
 [out]
 main:1: error: Name 'TYPE_CHECKING' is not defined
 main:4: error: Cannot find implementation or library stub for module named "xyz753"
-main:4: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:4: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testConditionalClassDefPY3]
 def f(): pass
diff --git a/test-data/unit/check-varargs.test b/test-data/unit/check-varargs.test
index ac1179d..5b70b43 100644
--- a/test-data/unit/check-varargs.test
+++ b/test-data/unit/check-varargs.test
@@ -602,7 +602,7 @@
     a, aa = G().f(*[a]) \
       # E: Incompatible types in assignment (expression has type "List[A]", variable has type "A") \
       # E: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "List[A]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant
 
 if int():
@@ -610,19 +610,19 @@
 if int():
     ab, aa = G().f(*[a]) \
       # E: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "List[A]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant \
       # E: Argument 1 to "f" of "G" has incompatible type "*List[A]"; expected "B"
 
 if int():
     ao, ao = G().f(*[a]) \
       # E: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "List[object]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant
 if int():
     aa, aa = G().f(*[a]) \
       # E: Incompatible types in assignment (expression has type "List[<nothing>]", variable has type "List[A]") \
-      # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+      # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
       # N: Consider using "Sequence" instead, which is covariant
 
 class G(Generic[T]):
@@ -698,12 +698,12 @@
 c = {'c': 1.0}
 d = {'d': 1}
 f(a) # E: Argument 1 to "f" has incompatible type "Dict[str, List[int]]"; expected "Dict[str, Sequence[int]]" \
-     # N: "Dict" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+     # N: "Dict" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
      # N: Consider using "Mapping" instead, which is covariant in the value type
 f(b) # E: Argument 1 to "f" has incompatible type "Dict[str, List[str]]"; expected "Dict[str, Sequence[int]]"
 g(c)
 g(d) # E: Argument 1 to "g" has incompatible type "Dict[str, int]"; expected "Dict[str, float]" \
-     # N: "Dict" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+     # N: "Dict" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
      # N: Consider using "Mapping" instead, which is covariant in the value type
 h(c) # E: Argument 1 to "h" has incompatible type "Dict[str, float]"; expected "Dict[str, int]"
 h(d)
@@ -715,7 +715,7 @@
 def f(numbers: List[Union[int, float]]) -> None: pass
 a = [1, 2]
 f(a) # E: Argument 1 to "f" has incompatible type "List[int]"; expected "List[Union[int, float]]" \
-     # N: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance \
+     # N: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance \
      # N: Consider using "Sequence" instead, which is covariant
 x = [1]
 y = ['a']
diff --git a/test-data/unit/cmdline.test b/test-data/unit/cmdline.test
index 55335a8..1760694 100644
--- a/test-data/unit/cmdline.test
+++ b/test-data/unit/cmdline.test
@@ -323,7 +323,7 @@
 baz(bar(foo('oof')))
 [out]
 file.py:1: error: Cannot find implementation or library stub for module named "no_stubs"
-file.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+file.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 file.py:6: error: Argument 1 to "foo" has incompatible type "str"; expected "int"
 
 [case testIgnoreErrorsConfig]
@@ -478,7 +478,7 @@
 ignore_missing_imports = False
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "missing"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main.py:2: note: Revealed type is 'Any'
 
 [case testConfigSilentMissingImportsOn]
@@ -510,7 +510,7 @@
 main.py:1: note: You may be running mypy in a subpackage, mypy should be run on the package root
 main.py:2: error: Cannot find implementation or library stub for module named "grandparent"
 main.py:3: error: Cannot find implementation or library stub for module named "missing"
-main.py:3: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testImportInParentButNoInit]
 # cmd: mypy main.py
@@ -521,7 +521,7 @@
 [file main/__init__.py]
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "needs_init"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testConfigNoErrorForUnknownXFlagInSubsection]
 # cmd: mypy -c pass
@@ -556,7 +556,7 @@
 whatever
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "a.b"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main.py:1: error: Cannot find implementation or library stub for module named "a"
 
 [case testPythonVersionTooOld10]
@@ -1037,7 +1037,7 @@
 x = y
 [out]
 bad.py:4: error: Incompatible types in assignment (expression has type "List[int]", variable has type "List[float]")
-bad.py:4: note: "List" is invariant -- see http://mypy.readthedocs.io/en/latest/common_issues.html#variance
+bad.py:4: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance
 bad.py:4: note: Consider using "Sequence" instead, which is covariant
 Found 1 error in 1 file (checked 1 source file)
 
diff --git a/test-data/unit/fine-grained-blockers.test b/test-data/unit/fine-grained-blockers.test
index 6745fe2..40c5fb7 100644
--- a/test-data/unit/fine-grained-blockers.test
+++ b/test-data/unit/fine-grained-blockers.test
@@ -135,7 +135,7 @@
 def f() -> None: pass
 [out]
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 a.py:1: error: invalid syntax
 ==
@@ -278,7 +278,7 @@
 a.py:1: error: invalid syntax
 ==
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 b.py:1: error: Cannot find implementation or library stub for module named "a"
 
 [case testDeleteFileWithBlockingError-only_when_cache]
@@ -299,7 +299,7 @@
 a.py:1: error: invalid syntax
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "a"
 
 [case testModifyFileWhileBlockingErrorElsewhere]
@@ -372,7 +372,7 @@
 [out]
 ==
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main:4: error: "A" has no attribute "f"
 
@@ -390,7 +390,7 @@
 [out]
 ==
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main:1: error: Module 'a' has no attribute 'A'
 
diff --git a/test-data/unit/fine-grained-follow-imports.test b/test-data/unit/fine-grained-follow-imports.test
index d1ccd5d..29d67a6 100644
--- a/test-data/unit/fine-grained-follow-imports.test
+++ b/test-data/unit/fine-grained-follow-imports.test
@@ -40,7 +40,7 @@
 
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "a"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main.py:2: error: Missing positional argument "x" in call to "f"
 ==
@@ -83,7 +83,7 @@
 
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "a"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main.py:2: error: Missing positional argument "x" in call to "f"
 ==
@@ -217,7 +217,7 @@
 [out]
 ==
 main.py:1: error: Cannot find implementation or library stub for module named "a"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main.py:2: error: Missing positional argument "x" in call to "f"
 
@@ -240,7 +240,7 @@
 [out]
 ==
 main.py:1: error: Cannot find implementation or library stub for module named "a"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main.py:2: error: Missing positional argument "x" in call to "f"
 
@@ -334,7 +334,7 @@
 b.py:1: error: "int" not callable
 ==
 main.py:1: error: Cannot find implementation or library stub for module named "a"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 b.py:1: error: "int" not callable
 
@@ -474,12 +474,12 @@
 
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "p1.m"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main.py:1: error: Cannot find implementation or library stub for module named "p1"
 main.py:2: error: Cannot find implementation or library stub for module named "p2"
 ==
 main.py:2: error: Cannot find implementation or library stub for module named "p2"
-main.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 p1/__init__.py:1: error: "int" not callable
 ==
 p1/__init__.py:1: error: "int" not callable
@@ -499,7 +499,7 @@
 
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "p"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main.py:1: error: Module 'p' has no attribute 'm'
 ==
@@ -531,13 +531,13 @@
 
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "p1.s1.m"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main.py:1: error: Cannot find implementation or library stub for module named "p1"
 main.py:1: error: Cannot find implementation or library stub for module named "p1.s1"
 main.py:2: error: Cannot find implementation or library stub for module named "p2.s2"
 ==
 main.py:2: error: Cannot find implementation or library stub for module named "p2.s2"
-main.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main.py:3: error: Missing positional argument "x" in call to "f"
 ==
 main.py:3: error: Missing positional argument "x" in call to "f"
@@ -587,7 +587,7 @@
 
 [out]
 main.py:2: error: Cannot find implementation or library stub for module named "p"
-main.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 p/m.py:1: error: "str" not callable
 p/__init__.py:1: error: "int" not callable
@@ -610,7 +610,7 @@
 
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "p"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 p/m.pyi:1: error: "str" not callable
 p/__init__.pyi:1: error: "int" not callable
@@ -637,13 +637,13 @@
 [out]
 p1/m1.py:1: error: "int" not callable
 main.py:2: error: Cannot find implementation or library stub for module named "p2.m2"
-main.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 p2/m2.py:1: error: "str" not callable
 p1/m1.py:1: error: "int" not callable
 ==
 main.py:2: error: Cannot find implementation or library stub for module named "p2.m2"
-main.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 p1/m1.py:1: error: "int" not callable
 
 [case testFollowImportsNormalNewFileOnCommandLine]
@@ -737,7 +737,7 @@
 
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "pkg"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 
 [case testFollowImportsNormalDeletePackage]
@@ -769,4 +769,4 @@
 [out]
 ==
 main.py:1: error: Cannot find implementation or library stub for module named "pkg"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
diff --git a/test-data/unit/fine-grained-modules.test b/test-data/unit/fine-grained-modules.test
index c77e11d..2dfbf43 100644
--- a/test-data/unit/fine-grained-modules.test
+++ b/test-data/unit/fine-grained-modules.test
@@ -53,7 +53,7 @@
 [out]
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 
 [case testAddFileFixesAndGeneratesError1]
@@ -69,10 +69,10 @@
 [out]
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 b.py:2: error: Too many arguments for "f"
 
@@ -89,10 +89,10 @@
 [out]
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 b.py:2: error: Too many arguments for "f"
 
@@ -119,10 +119,10 @@
 [out]
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "a"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testAddFilePreservesError2]
 import b
@@ -162,7 +162,7 @@
 [out]
 ==
 b.py:2: error: Cannot find implementation or library stub for module named "a"
-b.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testImportLineNumber2]
 import b
@@ -175,11 +175,11 @@
 [out]
 ==
 b.py:2: error: Cannot find implementation or library stub for module named "a"
-b.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 b.py:3: error: Cannot find implementation or library stub for module named "c"
 ==
 b.py:2: error: Cannot find implementation or library stub for module named "a"
-b.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 b.py:3: error: Cannot find implementation or library stub for module named "c"
 
 [case testAddPackage1]
@@ -190,7 +190,7 @@
 def f(x: str) -> None: pass
 [out]
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "p"
 ==
 main:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
@@ -204,7 +204,7 @@
 def f(x: str) -> None: pass
 [out]
 main:1: error: Cannot find implementation or library stub for module named "p"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 
@@ -216,11 +216,11 @@
 def f(x: str) -> None: pass
 [out]
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "p"
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 [builtins fixtures/module.pyi]
@@ -233,11 +233,11 @@
 [file p/__init__.py.3]
 [out]
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "p"
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "p"
 ==
 main:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
@@ -267,11 +267,11 @@
 [file p/__init__.py.3]
 [out]
 main:4: error: Cannot find implementation or library stub for module named "p.a"
-main:4: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:4: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:4: error: Cannot find implementation or library stub for module named "p"
 ==
 main:4: error: Cannot find implementation or library stub for module named "p.a"
-main:4: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:4: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:4: error: Cannot find implementation or library stub for module named "p"
 ==
 main:5: error: Argument 1 to "f" has incompatible type "int"; expected "str"
@@ -302,7 +302,7 @@
 [file p/__init__.py.2]
 [out]
 x.py:1: error: Cannot find implementation or library stub for module named "p.a"
-x.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+x.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 x.py:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 
@@ -375,7 +375,7 @@
 [out]
 ==
 a.py:1: error: Cannot find implementation or library stub for module named "b"
-a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 a.py:4: error: Missing positional argument "x" in call to "f"
 
@@ -389,7 +389,7 @@
 [out]
 ==
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 
 [case testDeletionOfSubmoduleTriggersImportFrom1-only_when_nocache]
@@ -405,7 +405,7 @@
 main:1: error: Module 'p' has no attribute 'q'
 -- TODO: The following messages are different compared to non-incremental mode
 main:1: error: Cannot find implementation or library stub for module named "p.q"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 
 -- TODO: Fix this bug. It is a real bug that was been papered over
@@ -421,7 +421,7 @@
 [out]
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.q"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 
 [case testDeletionOfSubmoduleTriggersImportFrom2]
@@ -436,7 +436,7 @@
 [out]
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.q"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main:2: error: Missing positional argument "x" in call to "f"
 
@@ -451,7 +451,7 @@
 [out]
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.q"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 
 [case testDeleteSubpackageWithNontrivialParent1]
@@ -482,7 +482,7 @@
 a.py:2: error: Incompatible return value type (got "int", expected "str")
 ==
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testDeleteModuleWithErrorInsidePackage]
 import a.b
@@ -497,7 +497,7 @@
 a/b.py:2: error: Incompatible return value type (got "str", expected "int")
 ==
 main:1: error: Cannot find implementation or library stub for module named "a.b"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testModifyTwoFilesNoError1]
 import a
@@ -636,7 +636,7 @@
 b.f()
 [out]
 a.py:1: error: Cannot find implementation or library stub for module named "b"
-a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 a.py:2: error: Cannot find implementation or library stub for module named "c"
 ==
 
@@ -657,7 +657,7 @@
 b.f(1)
 [out]
 a.py:1: error: Cannot find implementation or library stub for module named "b"
-a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 a.py:2: error: Cannot find implementation or library stub for module named "c"
 ==
 c.py:3: error: Too many arguments for "f"
@@ -674,7 +674,7 @@
 def g() -> None: pass
 [out]
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Cannot find implementation or library stub for module named "b"
 ==
 main:3: error: Too many arguments for "f"
@@ -694,7 +694,7 @@
 [out]
 ==
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Cannot find implementation or library stub for module named "b"
 
 [case testDeleteTwoFilesNoErrors]
@@ -735,7 +735,7 @@
 a.py:3: error: Too many arguments for "g"
 ==
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Cannot find implementation or library stub for module named "b"
 
 [case testAddFileWhichImportsLibModule]
@@ -747,7 +747,7 @@
 [builtins fixtures/tuple.pyi]
 [out]
 main:1: error: Cannot find implementation or library stub for module named "a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main:2: error: Incompatible types in assignment (expression has type "int", variable has type "str")
 
@@ -761,7 +761,7 @@
 z
 [out]
 main:2: error: Cannot find implementation or library stub for module named "a"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 a.py:3: error: Name 'z' is not defined
 <ROOT>/test-data/unit/lib-stub/broken.pyi:2: error: Name 'y' is not defined
@@ -828,7 +828,7 @@
 a.py:2: error: Too many arguments for "g"
 ==
 a.py:1: error: Cannot find implementation or library stub for module named "m.x"
-a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 a.py:2: error: Module has no attribute "x"
 
 [case testDeletePackage1]
@@ -844,7 +844,7 @@
 main:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "p"
 
 [case testDeletePackage2]
@@ -860,7 +860,7 @@
 main:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 ==
 main:1: error: Cannot find implementation or library stub for module named "p"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testDeletePackage3]
 
@@ -876,11 +876,11 @@
 main:3: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 ==
 main:2: error: Cannot find implementation or library stub for module named "p.a"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:3: error: Module has no attribute "a"
 ==
 main:2: error: Cannot find implementation or library stub for module named "p.a"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Cannot find implementation or library stub for module named "p"
 
 [case testDeletePackage4]
@@ -895,11 +895,11 @@
 main:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "p"
 ==
 main:1: error: Cannot find implementation or library stub for module named "p.a"
-main:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:1: error: Cannot find implementation or library stub for module named "p"
 
 [case testDeletePackage5]
@@ -918,11 +918,11 @@
 main:6: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 ==
 main:5: error: Cannot find implementation or library stub for module named "p.a"
-main:5: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:5: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:5: error: Cannot find implementation or library stub for module named "p"
 ==
 main:5: error: Cannot find implementation or library stub for module named "p.a"
-main:5: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:5: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:5: error: Cannot find implementation or library stub for module named "p"
 
 
@@ -944,7 +944,7 @@
 p/b.py:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 ==
 p/b.py:1: error: Cannot find implementation or library stub for module named "p.a"
-p/b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+p/b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 p/b.py:2: error: Argument 1 to "f" has incompatible type "int"; expected "str"
 
@@ -1418,7 +1418,7 @@
 [out]
 ==
 a.py:1: error: Cannot find implementation or library stub for module named "b"
-a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 
 [case testRefreshImportIfMypyElse1]
@@ -1814,7 +1814,7 @@
 ==
 ==
 a.py:2: error: Cannot find implementation or library stub for module named "b"
-a.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testErrorButDontIgnore1]
 # cmd: mypy a.py c.py
@@ -1889,7 +1889,7 @@
 p/b.py: error: Ancestor package 'p' ignored
 p/b.py: note: (Using --follow-imports=error, submodule passed on command line)
 p/b.py:1: error: Cannot find implementation or library stub for module named "z"
-p/b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+p/b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testTurnPackageToModule]
 [file a.py]
@@ -2150,7 +2150,7 @@
 foo.x = 'y'
 [out]
 main.py:1: error: Cannot find implementation or library stub for module named "foo"
-main.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 main.py:2: error: Incompatible types in assignment (expression has type "int", variable has type "str")
 ==
diff --git a/test-data/unit/fine-grained.test b/test-data/unit/fine-grained.test
index 7dac429..6b8f250 100644
--- a/test-data/unit/fine-grained.test
+++ b/test-data/unit/fine-grained.test
@@ -474,7 +474,7 @@
 ==
 ==
 a.py:1: error: Cannot find implementation or library stub for module named "b"
-a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testIgnoreWorksWithMissingImports]
 import a
@@ -508,7 +508,7 @@
 x = str()
 [out]
 b.py:1: error: Cannot find implementation or library stub for module named "xyz"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 ==
 a.py:2: error: Incompatible types in assignment (expression has type "str", variable has type "int")
@@ -527,7 +527,7 @@
 [out]
 ==
 b.py:1: error: Cannot find implementation or library stub for module named "xyz"
-b.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+b.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 a.py:2: error: Incompatible types in assignment (expression has type "str", variable has type "int")
 
@@ -1810,7 +1810,7 @@
 main:2: note: Revealed type is 'contextlib.GeneratorContextManager[None]'
 ==
 a.py:3: error: Cannot find implementation or library stub for module named "b"
-a.py:3: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: note: Revealed type is 'contextlib.GeneratorContextManager[None]'
 ==
 main:2: note: Revealed type is 'contextlib.GeneratorContextManager[None]'
@@ -1857,7 +1857,7 @@
 a.py:11: error: Too many arguments for "h"
 ==
 a.py:10: error: Cannot find implementation or library stub for module named "b"
-a.py:10: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:10: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 a.py:11: error: Too many arguments for "h"
 ==
@@ -1891,7 +1891,7 @@
 [out]
 ==
 a.py:3: error: Cannot find implementation or library stub for module named "b"
-a.py:3: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+a.py:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 ==
 ==
 
@@ -2510,7 +2510,7 @@
 [out]
 ==
 main:2: error: Cannot find implementation or library stub for module named "m"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:7: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same or broader
 main:9: error: Cannot find implementation or library stub for module named "n"
 
@@ -2539,7 +2539,7 @@
 [out]
 ==
 main:2: error: Cannot find implementation or library stub for module named "m"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:12: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same or broader
 main:14: error: Cannot find implementation or library stub for module named "n"
 
@@ -7926,18 +7926,18 @@
 a.py:1: error: Name 'TypeVar' is not defined
 a.py:1: note: Did you forget to import it from "typing"? (Suggestion: "from typing import TypeVar")
 a.py:7: error: Variable "a.T" is not valid as a type
-a.py:7: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+a.py:7: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 a.py:10: error: Name 'bar' already defined on line 6
 a.py:11: error: Variable "a.T" is not valid as a type
-a.py:11: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+a.py:11: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 ==
 a.py:1: error: Name 'TypeVar' is not defined
 a.py:1: note: Did you forget to import it from "typing"? (Suggestion: "from typing import TypeVar")
 a.py:7: error: Variable "a.T" is not valid as a type
-a.py:7: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+a.py:7: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 a.py:10: error: Name 'bar' already defined on line 6
 a.py:11: error: Variable "a.T" is not valid as a type
-a.py:11: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+a.py:11: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testRefreshForWithTypeComment1]
 [file a.py]
@@ -8402,7 +8402,7 @@
 [out]
 ==
 main:5: error: Variable "b.B" is not valid as a type
-main:5: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+main:5: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testNamedTupleForwardFunctionIndirect]
 # flags: --ignore-missing-imports
@@ -8420,7 +8420,7 @@
 [out]
 ==
 main:5: error: Variable "a.A" is not valid as a type
-main:5: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+main:5: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testNamedTupleForwardFunctionIndirectReveal]
 # flags: --ignore-missing-imports
@@ -8448,10 +8448,10 @@
 [out]
 ==
 m.py:4: error: Variable "a.A" is not valid as a type
-m.py:4: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+m.py:4: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 ==
 m.py:4: error: Variable "a.A" is not valid as a type
-m.py:4: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+m.py:4: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 m.py:5: note: Revealed type is 'Any'
 m.py:7: note: Revealed type is 'Any'
 
@@ -8467,7 +8467,7 @@
 [out]
 ==
 main:5: error: Variable "b.B" is not valid as a type
-main:5: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+main:5: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testAliasForwardFunctionIndirect]
 # flags: --ignore-missing-imports
@@ -8484,7 +8484,7 @@
 [out]
 ==
 main:5: error: Variable "a.A" is not valid as a type
-main:5: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+main:5: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testLiteralFineGrainedVarConversion]
 import mod
diff --git a/test-data/unit/merge.test b/test-data/unit/merge.test
index aafcbc2..836ad87 100644
--- a/test-data/unit/merge.test
+++ b/test-data/unit/merge.test
@@ -779,7 +779,7 @@
 x: foo[A]
 [out]
 tmp/target.py:4: error: Variable "target.foo" is not valid as a type
-tmp/target.py:4: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+tmp/target.py:4: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 ## target
 NameExpr:3: builtins.int<0>
 NameExpr:4: foo?[target.A<1>]
diff --git a/test-data/unit/pep561.test b/test-data/unit/pep561.test
index 9fcc336..e8cb692 100644
--- a/test-data/unit/pep561.test
+++ b/test-data/unit/pep561.test
@@ -36,7 +36,7 @@
 no_site_packages=True
 [out]
 testTypedPkg_config_nositepackages.py:2: error: Cannot find implementation or library stub for module named "typedpkg.sample"
-testTypedPkg_config_nositepackages.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+testTypedPkg_config_nositepackages.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 testTypedPkg_config_nositepackages.py:3: error: Cannot find implementation or library stub for module named "typedpkg"
 testTypedPkg_config_nositepackages.py:5: note: Revealed type is 'Any'
 
@@ -49,7 +49,7 @@
 reveal_type(a)
 [out]
 testTypedPkg_args_nositepackages.py:3: error: Cannot find implementation or library stub for module named "typedpkg.sample"
-testTypedPkg_args_nositepackages.py:3: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+testTypedPkg_args_nositepackages.py:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 testTypedPkg_args_nositepackages.py:4: error: Cannot find implementation or library stub for module named "typedpkg"
 testTypedPkg_args_nositepackages.py:6: note: Revealed type is 'Any'
 
@@ -133,7 +133,7 @@
 dne("abc")
 [out]
 testTypedPkgNamespaceImportFrom.py:4: error: Cannot find implementation or library stub for module named "typedpkg_ns.ns.dne"
-testTypedPkgNamespaceImportFrom.py:4: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+testTypedPkgNamespaceImportFrom.py:4: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 testTypedPkgNamespaceImportFrom.py:10: error: Argument 1 to "af" has incompatible type "bool"; expected "str"
 testTypedPkgNamespaceImportFrom.py:11: error: Argument 1 to "bf" has incompatible type "int"; expected "bool"
 
@@ -152,7 +152,7 @@
 dne("abc")
 [out]
 testTypedPkgNamespaceImportAs.py:4: error: Cannot find implementation or library stub for module named "typedpkg_ns.ns.dne"
-testTypedPkgNamespaceImportAs.py:4: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+testTypedPkgNamespaceImportAs.py:4: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 testTypedPkgNamespaceImportAs.py:10: error: Argument 1 has incompatible type "bool"; expected "str"
 testTypedPkgNamespaceImportAs.py:11: error: Argument 1 has incompatible type "int"; expected "bool"
 
@@ -172,6 +172,6 @@
 
 [out]
 testTypedPkgNamespaceRegImport.py:4: error: Cannot find implementation or library stub for module named "typedpkg_ns.ns.dne"
-testTypedPkgNamespaceRegImport.py:4: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+testTypedPkgNamespaceRegImport.py:4: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 testTypedPkgNamespaceRegImport.py:10: error: Argument 1 has incompatible type "bool"; expected "str"
 testTypedPkgNamespaceRegImport.py:11: error: Argument 1 has incompatible type "int"; expected "bool"
diff --git a/test-data/unit/pythoneval-asyncio.test b/test-data/unit/pythoneval-asyncio.test
index 48b9bd3..dec689f 100644
--- a/test-data/unit/pythoneval-asyncio.test
+++ b/test-data/unit/pythoneval-asyncio.test
@@ -502,4 +502,4 @@
 [out]
 _program.py:8: note: Revealed type is 'def [T] (arg: P?) -> T`-1'
 _program.py:12: error: Variable "_testForwardRefToBadAsyncShouldNotCrash_newsemanal.P" is not valid as a type
-_program.py:12: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+_program.py:12: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
diff --git a/test-data/unit/pythoneval.test b/test-data/unit/pythoneval.test
index 187d9c1..d6316b9 100644
--- a/test-data/unit/pythoneval.test
+++ b/test-data/unit/pythoneval.test
@@ -1260,7 +1260,7 @@
 bar * 4 + bar + 3  # should not produce more errors
 [out]
 _testMetaclassOpAccessAny.py:2: error: Cannot find implementation or library stub for module named "nonexistent"
-_testMetaclassOpAccessAny.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+_testMetaclassOpAccessAny.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testEnumIterationAndPreciseElementType]
 # Regression test for #2305
diff --git a/test-data/unit/semanal-errors.test b/test-data/unit/semanal-errors.test
index 8fe6c70..3fcae70 100644
--- a/test-data/unit/semanal-errors.test
+++ b/test-data/unit/semanal-errors.test
@@ -137,7 +137,7 @@
 main:5: error: Function "__main__.f" is not valid as a type
 main:5: note: Perhaps you need "Callable[...]" or a callback protocol?
 main:6: error: Variable "__main__.x" is not valid as a type
-main:6: note: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+main:6: note: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testGlobalVarRedefinition]
 import typing
@@ -202,21 +202,21 @@
 import m
 [out]
 main:2: error: Cannot find implementation or library stub for module named "m"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testMissingModule2]
 import typing
 from m import x
 [out]
 main:2: error: Cannot find implementation or library stub for module named "m"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testMissingModule3]
 import typing
 from m import *
 [out]
 main:2: error: Cannot find implementation or library stub for module named "m"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testMissingModuleRelativeImport]
 import typing
@@ -225,7 +225,7 @@
 from .x import y
 [out]
 tmp/m/__init__.py:1: error: Cannot find implementation or library stub for module named "m.x"
-tmp/m/__init__.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+tmp/m/__init__.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testMissingModuleRelativeImport2]
 import typing
@@ -235,7 +235,7 @@
 from .x import y
 [out]
 tmp/m/a.py:1: error: Cannot find implementation or library stub for module named "m.x"
-tmp/m/a.py:1: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+tmp/m/a.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 
 [case testModuleNotImported]
 import typing
@@ -284,7 +284,7 @@
 import m.n
 [out]
 main:2: error: Cannot find implementation or library stub for module named "m.n"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Cannot find implementation or library stub for module named "m"
 
 [case testMissingPackage2]
@@ -293,7 +293,7 @@
 from a.b import *
 [out]
 main:2: error: Cannot find implementation or library stub for module named "m.n"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:3: error: Cannot find implementation or library stub for module named "a.b"
 
 [case testErrorInImportedModule]
@@ -323,7 +323,7 @@
 x = 1
 [out]
 main:2: error: Cannot find implementation or library stub for module named "m.n"
-main:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports
+main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
 main:2: error: Cannot find implementation or library stub for module named "m"
 
 [case testBreakOutsideLoop]
@@ -799,7 +799,7 @@
 from typing import cast
 x = 0
 cast(x, None)        # E: Variable "__main__.x" is not valid as a type \
-                     # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                     # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 cast(t, None)        # E: Name 't' is not defined
 cast(__builtins__.x, None) # E: Name '__builtins__.x' is not defined
 [out]
@@ -895,7 +895,7 @@
 t = TypeVar('t')
 class A(Generic[t]): pass
 A[TypeVar] # E: Variable "typing.TypeVar" is not valid as a type \
-           # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+           # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 [out]
 
 [case testInvalidTypeInTypeApplication2]
diff --git a/test-data/unit/semanal-typealiases.test b/test-data/unit/semanal-typealiases.test
index 46af116..0f16754 100644
--- a/test-data/unit/semanal-typealiases.test
+++ b/test-data/unit/semanal-typealiases.test
@@ -405,14 +405,14 @@
 import typing
 A = [int, str]
 a = 1 # type: A  # E: Variable "__main__.A" is not valid as a type \
-                 # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                 # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testCantUseStringLiteralAsTypeAlias]
 
 from typing import Union
 A = 'Union[int, str]'
 a = 1 # type: A  # E: Variable "__main__.A" is not valid as a type \
-                 # N: See https://mypy.readthedocs.io/en/latest/common_issues.html#variables-vs-type-aliases
+                 # N: See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases
 
 [case testStringLiteralTypeAsAliasComponent]
 from typing import Union