diff --git a/docs/about/release-notes.md b/docs/about/release-notes.md
index ea3550fc..7a96769c 100644
--- a/docs/about/release-notes.md
+++ b/docs/about/release-notes.md
@@ -21,6 +21,14 @@ The current and past members of the MkDocs team.
 * [@d0ugal](https://github.com/d0ugal/)
 * [@waylan](https://github.com/waylan/)
 
+## Version 0.16.2 (2017-03-??)
+
+* System root (`/`) is not a valid path for site_dir or docs_dir (#1161)
+* Refactor readthedocs theme navigation (#1155 & #1156)
+* Add support to dev server to serve custom error pages (#1040)
+* Ensure nav.homepage.url is not blank on error pages (#1131)
+* Increase livereload dependency to 2.5.1 (#1106)
+
 ## Version 0.16.1 (2016-12-22)
 
 * Ensure scrollspy behavior does not affect nav bar (#1094)
diff --git a/docs/user-guide/configuration.md b/docs/user-guide/configuration.md
index 76652fe0..40f45196 100644
--- a/docs/user-guide/configuration.md
+++ b/docs/user-guide/configuration.md
@@ -181,8 +181,8 @@ up.
 
 Lets you set the directory containing the documentation source markdown files.
 This can either be a relative directory, in which case it is resolved relative
-to the directory containing you configuration file, or it can be an absolute
-directory path.
+to the directory containing your configuration file, or it can be an absolute
+directory path from the root of your local file system.
 
 **default**: `'docs'`
 
@@ -190,8 +190,8 @@ directory path.
 
 Lets you set the directory where the output HTML and other files are created.
 This can either be a relative directory, in which case it is resolved relative
-to the directory containing you configuration file, or it can be an absolute
-directory path.
+to the directory containing your configuration file, or it can be an absolute
+directory path from the root of your local file system.
 
 **default**: `'site'`
 
diff --git a/mkdocs/config/config_options.py b/mkdocs/config/config_options.py
index 7fa3ac6f..d5e656fd 100644
--- a/mkdocs/config/config_options.py
+++ b/mkdocs/config/config_options.py
@@ -253,14 +253,14 @@ class SiteDir(Dir):
         # Validate that the docs_dir and site_dir don't contain the
         # other as this will lead to copying back and forth on each
         # and eventually make a deep nested mess.
-        if (config['docs_dir'] + os.sep).startswith(config['site_dir'] + os.sep):
+        if (config['docs_dir'] + os.sep).startswith(config['site_dir'].rstrip(os.sep) + os.sep):
             raise ValidationError(
                 ("The 'docs_dir' should not be within the 'site_dir' as this "
                  "can mean the source files are overwritten by the output or "
                  "it will be deleted if --clean is passed to mkdocs build."
                  "(site_dir: '{0}', docs_dir: '{1}')"
                  ).format(config['site_dir'], config['docs_dir']))
-        elif (config['site_dir'] + os.sep).startswith(config['docs_dir'] + os.sep):
+        elif (config['site_dir'] + os.sep).startswith(config['docs_dir'].rstrip(os.sep) + os.sep):
             raise ValidationError(
                 ("The 'site_dir' should not be within the 'docs_dir' as this "
                  "leads to the build directory being copied into itself and "

Advice: Do not set site_dir to /
Just a warning to anyone who might want to change their project build directory to the root of the project, with a .yml file like this:

```yaml
site_name: My Docs
site_dir: /
pages:
  - Home: index.md
theme: material
```

It won't do what you think it will. If you run ```mkdocs build --clean``` you will have it recursively delete everything it can from your system root folder until it runs into a file it can't delete without sudo. You will lose the entire contents of your home folder as well as your Ubuntu profile, and do unknown damage to your system.

Time to reformat. :D
diff --git a/mkdocs/tests/config/config_options_tests.py b/mkdocs/tests/config/config_options_tests.py
index 284dbdc6..041dd21b 100644
--- a/mkdocs/tests/config/config_options_tests.py
+++ b/mkdocs/tests/config/config_options_tests.py
@@ -203,11 +203,21 @@ class DirTest(unittest.TestCase):
 
 class SiteDirTest(unittest.TestCase):
 
+    def validate_config(self, config):
+        """ Given a config with values for site_dir and doc_dir, run site_dir post_validation. """
+        site_dir = config_options.SiteDir()
+        docs_dir = config_options.Dir()
+
+        config['config_file_path'] = os.path.join(os.path.abspath('..'), 'mkdocs.yml')
+
+        config['docs_dir'] = docs_dir.validate(config['docs_dir'])
+        config['site_dir'] = site_dir.validate(config['site_dir'])
+        site_dir.post_validation(config, 'site_dir')
+        return True  # No errors were raised
+
     def test_doc_dir_in_site_dir(self):
 
         j = os.path.join
-        option = config_options.SiteDir()
-        docs_dir = config_options.Dir()
         # The parent dir is not the same on every system, so use the actual dir name
         parent_dir = mkdocs.__file__.split(os.sep)[-3]
 
@@ -218,16 +228,12 @@ class SiteDirTest(unittest.TestCase):
             {'docs_dir': 'docs', 'site_dir': ''},
             {'docs_dir': '', 'site_dir': ''},
             {'docs_dir': j('..', parent_dir, 'docs'), 'site_dir': 'docs'},
+            {'docs_dir': 'docs', 'site_dir': '/'}
         )
 
         for test_config in test_configs:
-            test_config['config_file_path'] = j(os.path.abspath('..'), 'mkdocs.yml')
-
-            test_config['docs_dir'] = docs_dir.validate(test_config['docs_dir'])
-            test_config['site_dir'] = option.validate(test_config['site_dir'])
-
             self.assertRaises(config_options.ValidationError,
-                              option.post_validation, test_config, 'site_dir')
+                              self.validate_config, test_config)
 
     def test_site_dir_in_docs_dir(self):
 
@@ -237,19 +243,23 @@ class SiteDirTest(unittest.TestCase):
             {'docs_dir': 'docs', 'site_dir': j('docs', 'site')},
             {'docs_dir': '.', 'site_dir': 'site'},
             {'docs_dir': '', 'site_dir': 'site'},
+            {'docs_dir': '/', 'site_dir': 'site'},
         )
 
         for test_config in test_configs:
-            test_config['config_file_path'] = j(os.path.abspath('..'), 'mkdocs.yml')
+            self.assertRaises(config_options.ValidationError,
+                              self.validate_config, test_config)
 
-            docs_dir = config_options.Dir()
-            option = config_options.SiteDir()
+    def test_common_prefix(self):
+        """ Legitimate settings with common prefixes should not fail validation. """
 
-            test_config['docs_dir'] = docs_dir.validate(test_config['docs_dir'])
-            test_config['site_dir'] = option.validate(test_config['site_dir'])
+        test_configs = (
+            {'docs_dir': 'docs', 'site_dir': 'docs-site'},
+            {'docs_dir': 'site-docs', 'site_dir': 'site'},
+        )
 
-            self.assertRaises(config_options.ValidationError,
-                              option.post_validation, test_config, 'site_dir')
+        for test_config in test_configs:
+            assert self.validate_config(test_config)
 
 
 class ThemeTest(unittest.TestCase):

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.9
requirements/project.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
click==8.1.8
exceptiongroup==1.2.2
importlib_metadata==8.6.1
iniconfig==2.1.0
Jinja2==3.1.6
livereload==2.7.1
Markdown==3.7
MarkupSafe==3.0.2
-e git+https://github.com/mkdocs/mkdocs.git@571bbbfb91eba00136f2b4e2131f1f2fc759b015#egg=mkdocs
packaging==24.2
pluggy==1.5.0
pytest==8.3.5
PyYAML==6.0.2
tomli==2.2.1
tornado==6.4.2
zipp==3.21.0

name: mkdocs
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - click==8.1.8
      - exceptiongroup==1.2.2
      - importlib-metadata==8.6.1
      - iniconfig==2.1.0
      - jinja2==3.1.6
      - livereload==2.7.1
      - markdown==3.7
      - markupsafe==3.0.2
      - packaging==24.2
      - pluggy==1.5.0
      - pytest==8.3.5
      - pyyaml==6.0.2
      - tomli==2.2.1
      - tornado==6.4.2
      - zipp==3.21.0
prefix: /opt/conda/envs/mkdocs

mkdocs/tests/config/config_options_tests.py::SiteDirTest::test_site_dir_in_docs_dir
mkdocs/tests/config/config_options_tests.py::OptionallyRequiredTest::test_default mkdocs/tests/config/config_options_tests.py::OptionallyRequiredTest::test_empty mkdocs/tests/config/config_options_tests.py::OptionallyRequiredTest::test_replace_default mkdocs/tests/config/config_options_tests.py::OptionallyRequiredTest::test_required mkdocs/tests/config/config_options_tests.py::OptionallyRequiredTest::test_required_no_default mkdocs/tests/config/config_options_tests.py::TypeTest::test_length mkdocs/tests/config/config_options_tests.py::TypeTest::test_multiple_types mkdocs/tests/config/config_options_tests.py::TypeTest::test_single_type mkdocs/tests/config/config_options_tests.py::URLTest::test_invalid mkdocs/tests/config/config_options_tests.py::URLTest::test_invalid_url mkdocs/tests/config/config_options_tests.py::URLTest::test_valid_url mkdocs/tests/config/config_options_tests.py::RepoURLTest::test_edit_uri_bitbucket mkdocs/tests/config/config_options_tests.py::RepoURLTest::test_edit_uri_custom mkdocs/tests/config/config_options_tests.py::RepoURLTest::test_edit_uri_github mkdocs/tests/config/config_options_tests.py::RepoURLTest::test_repo_name_bitbucket mkdocs/tests/config/config_options_tests.py::RepoURLTest::test_repo_name_custom mkdocs/tests/config/config_options_tests.py::RepoURLTest::test_repo_name_github mkdocs/tests/config/config_options_tests.py::DirTest::test_doc_dir_is_config_dir mkdocs/tests/config/config_options_tests.py::DirTest::test_file mkdocs/tests/config/config_options_tests.py::DirTest::test_incorrect_type_attribute_error mkdocs/tests/config/config_options_tests.py::DirTest::test_incorrect_type_type_error mkdocs/tests/config/config_options_tests.py::DirTest::test_missing_dir mkdocs/tests/config/config_options_tests.py::DirTest::test_missing_dir_but_required mkdocs/tests/config/config_options_tests.py::DirTest::test_valid_dir mkdocs/tests/config/config_options_tests.py::SiteDirTest::test_common_prefix mkdocs/tests/config/config_options_tests.py::SiteDirTest::test_doc_dir_in_site_dir mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_invalid mkdocs/tests/config/config_options_tests.py::ExtrasTest::test_empty mkdocs/tests/config/config_options_tests.py::ExtrasTest::test_invalid mkdocs/tests/config/config_options_tests.py::ExtrasTest::test_provided mkdocs/tests/config/config_options_tests.py::ExtrasTest::test_walk mkdocs/tests/config/config_options_tests.py::PagesTest::test_invalid_config mkdocs/tests/config/config_options_tests.py::PagesTest::test_invalid_type mkdocs/tests/config/config_options_tests.py::PagesTest::test_provided mkdocs/tests/config/config_options_tests.py::PagesTest::test_provided_dict mkdocs/tests/config/config_options_tests.py::PagesTest::test_provided_empty mkdocs/tests/config/config_options_tests.py::NumPagesTest::test_invalid_pages mkdocs/tests/config/config_options_tests.py::NumPagesTest::test_many_pages mkdocs/tests/config/config_options_tests.py::NumPagesTest::test_one_page mkdocs/tests/config/config_options_tests.py::NumPagesTest::test_provided mkdocs/tests/config/config_options_tests.py::PrivateTest::test_defined mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_builtins mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_builtins_config mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_configkey mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_duplicates mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_invalid_config_item mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_invalid_config_option mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_invalid_dict_item mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_list_dicts mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_mixed_list mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_none mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_not_list mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_simple_list
docs/user-guide/configuration.md docs/about/release-notes.md mkdocs/config/config_options.py
docs/user-guide/configuration.md docs/about/release-notes.md mkdocs/config/config_options.py