Repository: zulip/zulip

Issue:
docs: make links equally browsable on both GitHub and ReadTheDocs
Once upstream bug https://github.com/readthedocs/recommonmark/issues/179 is fixed, we can replace the `.html` part in links of the form `file_name.html#anchor` with `.md`.

This is a followup to https://github.com/zulip/zulip/pull/13232.


Discussion:
Hello @zulip/server-development members, this issue was labeled with the "area: documentation (developer)" label, so you may want to check it out!

<!-- areaLabelAddition -->

Resolving patch:
diff --git a/docs/conf.py b/docs/conf.py
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -36,6 +36,7 @@
     "colon_fence",
     "substitution",
 ]
+myst_heading_anchors = 6
 myst_substitutions = {
     "LATEST_RELEASE_VERSION": LATEST_RELEASE_VERSION,
 }
diff --git a/version.py b/version.py
--- a/version.py
+++ b/version.py
@@ -48,4 +48,4 @@
 #   historical commits sharing the same major version, in which case a
 #   minor version bump suffices.
 
-PROVISION_VERSION = "179.0"
+PROVISION_VERSION = "180.0"


Test patch:
diff --git a/docs/testing/linters.md b/docs/testing/linters.md
--- a/docs/testing/linters.md
+++ b/docs/testing/linters.md
@@ -65,7 +65,7 @@ but it is good practice to run lint checks locally.
 
 :::{important}
 We provide a
-[Git pre-commit hook](../git/zulip-tools.html#set-up-git-repo-script)
+[Git pre-commit hook](../git/zulip-tools.md#set-up-git-repo-script)
 that can automatically run `tools/lint` on just the files that
 changed (in a few 100ms) whenever you make a commit. This can save
 you a lot of time, by automatically detecting linter errors as you
diff --git a/docs/testing/testing-with-django.md b/docs/testing/testing-with-django.md
--- a/docs/testing/testing-with-django.md
+++ b/docs/testing/testing-with-django.md
@@ -330,7 +330,7 @@ with self.settings(RATE_LIMITING=True):
 self.assertTrue(rate_limit_mock.called)
 ```
 
-Follow [this link](../subsystems/settings.html#testing-non-default-settings) for more
+Follow [this link](../subsystems/settings.md#testing-non-default-settings) for more
 information on the "settings" context manager.
 
 Zulip has several features, like outgoing webhooks or social
@@ -411,7 +411,7 @@ We use mocks and stubs for all the typical reasons:
 - to stub out calls to third-party services
 - to make it so that you can [run the Zulip tests on the airplane without wifi][no-internet]
 
-[no-internet]: testing.html#internet-access-inside-test-suites
+[no-internet]: testing.md#internet-access-inside-test-suites
 
 A detailed description of mocks, along with useful coded snippets, can be found in the section
 [Testing with mocks](#testing-with-mocks).
@@ -449,7 +449,7 @@ the same data structure as performing an action that generates said event.
 
 This is a bit esoteric, but if you read the tests, you will see some of
 the patterns. You can also learn more about our event system in the
-[new feature tutorial](../tutorials/new-feature-tutorial.html#handle-database-interactions).
+[new feature tutorial](../tutorials/new-feature-tutorial.md#handle-database-interactions).
 
 ### Negative tests
 
diff --git a/docs/testing/testing.md b/docs/testing/testing.md
--- a/docs/testing/testing.md
+++ b/docs/testing/testing.md
@@ -126,7 +126,7 @@ This is easy to do using test fixtures (a fancy word for fixed data
 used in tests) and the `mock.patch` function to specify what HTTP
 response should be used by the tests for every outgoing HTTP (or other
 network) request. Consult
-[our guide on mocking](testing-with-django.html#zulip-mocking-practices) to
+[our guide on mocking](testing-with-django.md#zulip-mocking-practices) to
 learn how to mock network requests easily; there are also a number of
 examples throughout the codebase.