diff --git a/.github/matcher-htmlproofer.json b/.github/matcher-htmlproofer.json
new file mode 100644
index 00000000..ab46a46d
--- /dev/null
+++ b/.github/matcher-htmlproofer.json
@@ -0,0 +1,15 @@
+{
+ "__comment": "Docs: https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md",
+ "problemMatcher": [
+ {
+ "owner": "htmlproofer",
+ "pattern": [
+ {
+ "regexp": "^ERROR\\s+-\\s+htmlproofer: (invalid url - .+ \\[.+\\]) \\[(.+)\\]$",
+ "file": 2,
+ "message": 1
+ }
+ ]
+ }
+ ]
+}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index adfd1c78..a1801dec 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -84,6 +84,10 @@ jobs:
path: .cache
restore-keys: |
mkdocs-material-
+ # https://github.com/actions/toolkit/blob/main/docs/commands.md#problem-matchers
+ - name: Add problem matcher for HTML proofer invalid url errors
+ run: |
+ echo "::add-matcher::.github/matcher-htmlproofer.json"
- name: Build site
run: uv run mkdocs build --strict
diff --git a/REUSE.toml b/REUSE.toml
index 00f9a9e9..9cccb372 100644
--- a/REUSE.toml
+++ b/REUSE.toml
@@ -28,6 +28,14 @@ precedence = "override"
SPDX-FileCopyrightText = "Copyright (C) 2022 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre "
SPDX-License-Identifier = "MIT"
+[[annotations]]
+path = [
+ ".github/matcher-htmlproofer.json",
+]
+precedence = "override"
+SPDX-FileCopyrightText = "Copyright (C) 2026 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre "
+SPDX-License-Identifier = "MIT"
+
[[annotations]]
path = [
".vscode/C4.code-snippets",
diff --git a/docs/development/architecture/migration.md b/docs/development/architecture/migration.md
index c2111c3f..fac256f5 100644
--- a/docs/development/architecture/migration.md
+++ b/docs/development/architecture/migration.md
@@ -33,7 +33,7 @@ More details about this pattern can be found in the resources below.
- [The Strangler Fig Migration Pattern | by Diana Darie | Medium](https://dianadarie.medium.com/the-strangler-fig-migration-pattern-2e20a7350511)
- [The Strangler pattern in practice - Michiel Rook's blog](https://www.michielrook.nl/2016/11/strangler-pattern-practice/)
- [What is the Strangler Fig Pattern and How it Helps Manage Legacy Code](https://www.freecodecamp.org/news/what-is-the-strangler-pattern-in-software-development/)
-- [The Ship of Theseus to NOT rewrite a legacy system from scratch](https://web.archive.org/web/20241209060056/https://understandlegacycode.com/blog/ship-of-theseus-avoid-rewrite-legacy-system/)
+- [The Ship of Theseus to NOT rewrite a legacy system from scratch](https://understandlegacycode.com/blog/ship-of-theseus-avoid-rewrite-legacy-system/)
- [https://docs.microsoft.com/en-us/azure/architecture/patterns/strangler-fig](https://docs.microsoft.com/en-us/azure/architecture/patterns/strangler-fig)
## Migration Process
diff --git a/docs/development/best_practices/code_review.md b/docs/development/best_practices/code_review.md
index 04f15538..00478a82 100644
--- a/docs/development/best_practices/code_review.md
+++ b/docs/development/best_practices/code_review.md
@@ -172,6 +172,6 @@ The below list contains extra resources that may be of interest:
[^talk]: Presentation and slides on "Code Review Skills for Pythonistas": https://www.nnja.io/post/2018/2018-djangocon-code-review/
-[^phauer]: Code Review Guidelines for Humans: https://phauer.com/2018/code-review-guidelines/
+[^phauer]: Code Review Guidelines for Humans: https://web.archive.org/web/20250623040639/https://phauer.com/2018/code-review-guidelines/
[^twitter]: Rebecca's Rules for Constructive Code Reviews - Twitter: https://x.com/i_a_r_n_a/status/623922369376202758
diff --git a/mkdocs.yml b/mkdocs.yml
index 7a5d9f96..9024c15d 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -110,7 +110,8 @@ plugins:
- privacy
# https://github.com/manuzhang/mkdocs-htmlproofer-plugin#configuring
- htmlproofer:
- raise_error: True
+ # check all URLs before raising an error
+ raise_error_after_finish: True
raise_error_excludes:
# some URLs sporadically return a 504 (Gateway Timeout)
504: ["*"]
@@ -118,10 +119,6 @@ plugins:
429: ["*"]
skip_downloads: True
ignore_urls:
- # non-public URLs
- - https://docs.opalmedapps.ca/*
- - https://opalmedapps.gitlab.io/*
- # - https://github.com/opalmedapps/*
# PlantUML diagrams are included as data
- "data:*"
# Twitter URL sometimes returns a 404