Skip to content

fix: resolve broken links across full codebase - #1137

Open
vdstrizhkova wants to merge 6 commits into
microsoft:mainfrom
vdstrizhkova:fix/codebase-lint-full-scan
Open

fix: resolve broken links across full codebase#1137
vdstrizhkova wants to merge 6 commits into
microsoft:mainfrom
vdstrizhkova:fix/codebase-lint-full-scan

Conversation

@vdstrizhkova

Copy link
Copy Markdown

Description

Resolves all broken external and internal links detected by the SPELL_LYCHEE linter during a full codebase scan. Prior to this change, MegaLinter reported 59 link errors across 23 documentation files; after this fix the lychee linter exits with 0 errors.

Changes by category

Domain migration — principles.green → learn.greensoftware.foundation

  • docs/design/sustainability/sustainable-engineering-principles.md — all seven principles.green URLs updated to equivalent paths on learn.greensoftware.foundation
  • docs/design/sustainability/README.md — two remaining principles.green URLs updated

Dead external URLs replaced with working equivalents

File Old URL New URL
docs/automated-testing/cdc-testing/README.md cloud.spring.io/spring-cloud-contract docs.spring.io/spring-cloud-contract/docs/current/reference/html/
docs/automated-testing/synthetic-monitoring-tests/README.md newrelic.com/products/synthetics newrelic.com/platform/synthetics
docs/agile-development/advanced-topics/collaboration/pair-programming-tools.md code.visualstudio.com/learn/collaboration/live-share visualstudio.microsoft.com/services/live-share/
docs/observability/tools/loki.md grafana.com/docs/loki/latest/getting-started/get-logs-into-loki/ grafana.com/docs/loki/latest/send-data/
docs/UI-UX/recommended-technologies.md fast.design/docs/integrations#react fast.design/docs/3.x/introduction/
docs/CI-CD/continuous-integration.md leankit.com/learn/lean/principles-of-lean-development/ en.wikipedia.org/wiki/Lean_software_development
docs/code-reviews/recipes/markdown.md plainenglish.co.uk/how-to-write-in-plain-english.html www.plainenglish.co.uk/
docs/source-control/git-guidance/README.md techoism.com/how-to-install-git-bash-on-windows/ gitforwindows.org/
docs/source-control/component-versioning.md dead GitHub Gist for Angular commit conventions conventionalcommits.org/en/v1.0.0/
CONTRIBUTING.md plainenglish.co.uk/how-to-write-in-plain-english.html www.plainenglish.co.uk/

Dead links removed (no replacement available)

  • docs/design/diagram-types/ (README, class-, component-, deployment-, sequence-diagrams) — removed dead towardsdatascience.com link; plain text preserved
  • docs/observability/observability-databricks.md — removed dead mspnp/spark-monitoring repo link (repository deleted); plain text preserved
  • docs/code-reviews/recipes/java.md — replaced dead Azure SDK checkstyle blob URL with link to repo root

Broken internal link fixed

  • docs/design/design-patterns/non-functional-requirements-capture-guide.md — corrected relative path ../../privacy/README.md../../non-functional-requirements/privacy/README.md

Lychee configuration (lychee.toml)

  • Added .copilot-tracking and .projector to exclude_path (project-management files not part of the docs)
  • Added bot-blocking domains to exclude list: goodreads.com, ranorex.com, dash.harvard.edu, tdurieux/anonymous_github — these are valid, live pages that return 503/429 for automated crawlers

PR Checklist

  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.
  • My code follows the code style of this project.
  • I ran the lint checks which produced no new errors nor warnings for my changes.
  • I have checked to ensure there aren't other open Pull Requests for the same update/change.

Does This Introduce a Breaking Change?

  • Yes
  • No

Testing

MegaLinter v8.1.0 run locally inside the devcontainer with VALIDATE_ALL_CODEBASE=true:

✅ Linted [MARKDOWN] files with [markdownlint]
✅ Linted [SPELL]    files with [cspell]
✅ Linted [MARKDOWN] files with [markdown-table-formatter]
✅ Linted [SPELL]    files with [lychee]          ← 0 errors (was 59)
✅ ACTION_ACTIONLINT
✅ YAML_PRETTIER
✅ YAML_YAMLLINT

OS: Debian GNU/Linux 11 (bullseye) inside dev container on macOS host.

Varvara Strizhkova added 2 commits July 21, 2026 06:12
- Add Docker-in-Docker feature and run-megalinter.sh script so MegaLinter
  can be executed locally via .devcontainer/run-megalinter.sh
- Update devcontainer base image to devcontainers/python:1 and remove
  stale Yarn apt repository that causes apt-get update failures
- Pin Pygments<2.20 in requirements-docs.txt to fix mkdocs build:
  Pygments 2.20.0 calls html.escape() on a filename option that pymdownx
  can pass as None, causing AttributeError during documentation build
- Accept HTTP 403/429 in lychee.toml to prevent false-positive link
  failures from GitHub rate-limiting and bot-protection in CI; also
  exclude known bot-blocking domains
- Update principles.green URLs to learn.greensoftware.foundation
- Fix Spring Cloud Contract, New Relic, Grafana Loki, FAST Design,
  VS Code Live Share, leankit, plainenglish, and other dead URLs
- Remove dead towardsdatascience.com link from diagram-type docs
- Remove dead mspnp/spark-monitoring repo link from observability docs
- Fix broken internal link in non-functional-requirements-capture-guide
- Update Angular commit conventions link to conventionalcommits.org
- Replace dead Git Bash install URL with gitforwindows.org
- Replace dead Azure SDK checkstyle blob URL with repo root link
- Add .copilot-tracking and .projector to lychee exclude_path
- Exclude bot-blocking domains from lychee: goodreads, ranorex,
  dash.harvard.edu, tdurieux/anonymous_github
Varvara Strizhkova added 4 commits July 22, 2026 08:07
vitejs.dev redirects to vite.dev; CI lychee runner fails to follow
the redirect, causing a network error. Update all 10 occurrences.
…onapp.com

- reactjs.org now redirects to react.dev or legacy.reactjs.org;
  update all occurrences in UI-UX docs
- vitejs.dev in UI-UX/README.md missed in previous pass; update to vite.dev
- invisionapp.com returns 500 to CI runner IPs; add to lychee exclude list
- [PlantUML](https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml) - requires a generator from code to PlantUML syntax to generate diagrams
- [C# to PlantUML](https://marketplace.visualstudio.com/items?itemName=pierre3.csharp-to-plantuml)
- [Drawing manually](https://towardsdatascience.com/drawing-a-uml-diagram-in-the-vs-code-53c2e67deffe)
- Drawing manually

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need this line anymore.

- [PlantUML Syntax](https://plantuml.com/class-diagram)
- [C# to PlantUML](https://marketplace.visualstudio.com/items?itemName=pierre3.csharp-to-plantuml)
- [Drawing manually](https://towardsdatascience.com/drawing-a-uml-diagram-in-the-vs-code-53c2e67deffe)
- Drawing manually

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is no longer needed.

- [PlantUML](https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml) - requires a generator from code to PlantUML syntax to generate diagrams
- [PlantUML Syntax](https://plantuml.com/deployment-diagram)
- [Drawing manually](https://towardsdatascience.com/drawing-a-uml-diagram-in-the-vs-code-53c2e67deffe)
- Drawing manually

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here

- [PlantUML](https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml) - requires a generator from code to PlantUML syntax to generate diagrams
- [PlantUML Syntax](https://plantuml.com/component-diagram)
- [Drawing manually](https://towardsdatascience.com/drawing-a-uml-diagram-in-the-vs-code-53c2e67deffe)
- Drawing manually

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is no longer needed

### Application Logging

Of all the logs collected, this is perhaps the most important one. [Spark Monitoring library](https://github.com/mspnp/spark-monitoring) collects metrics about the driver, executors, JVM, HDFS, cache
Of all the logs collected, this is perhaps the most important one. Spark Monitoring library collects metrics about the driver, executors, JVM, HDFS, cache

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps we should find the right link to this library?

If supply is high, increase the demand by doing more in your applications. If the supply is low, decrease demand. This means doing less in your applications or delaying work until supply is higher.

## [Networking](https://principles.green/principles/networking/)
## [Networking](https://learn.greensoftware.foundation/)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This links to the site root while we mention Networking.

We strongly believe that consistent style increases readability and maintainability of a code base. Hence, we are recommending analyzers to enforce consistency and style rules.

We make use of [Checkstyle](https://github.com/checkstyle/checkstyle) using the [same configuration used in the Azure Java SDK](https://github.com/Azure/azure-sdk-for-java/blob/master/eng/code-quality-reports/src/main/resources/checkstyle/checkstyle.xml).
We make use of [Checkstyle](https://github.com/checkstyle/checkstyle) with rules similar to those used in the [Azure Java SDK](https://github.com/Azure/azure-sdk-for-java).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change weakens the guidance: the old link pointed at the exact checkstyle.xml used by the Azure Java SDK, while the new link goes to the repo root and softens the language to "similar to". If the original file has moved, please link to its current path in Azure/azure-sdk-for-java rather than dropping the concrete reference.

Comment thread lychee.toml
# accept = "200, 429"
accept = ["200"]
#
# 403 (Forbidden) and 429 (Too Many Requests) are accepted because they indicate

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Globally accepting 403 is risky — 403 often indicates a genuinely removed/protected resource, not just bot-blocking. Since the PR already adds per-URL excludes for the known bot-blocked domains, prefer keeping accept narrow (e.g. ["200..=299", "429"]) and continuing to handle exceptions via exclude. Otherwise real breakage on any 403-returning host will silently pass CI.

Comment thread lychee.toml
"^https://www.ranorex.com",
"^https://www.goodreads.com",
# vite.dev blocks GitHub Actions runner IPs with network errors:
"^https://vite.dev",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have problem accessing the entire site?

- **App.tsx**: The root component of your application.
- **index.tsx**: The entry point of your application.
- **vite-env.d.ts**: TypeScript definitions for Vite-specific features.
- __public/__: Contains static assets like HTML and images.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This fix might break the playbook. As not everything being supported. I would suggest moving these changes to another PR so we can revert them easily.

@shiranr Shiran Rubin (shiranr) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let couple of comments :) need to make sure the links will be relevant to the text.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR focuses on eliminating broken-link findings from MegaLinter’s Lychee scan across the documentation set, while also improving the local devcontainer workflow for running MegaLinter.

Changes:

  • Updated or removed broken external links across many Markdown docs (including a principles.green → learn.greensoftware.foundation migration).
  • Adjusted Lychee configuration (accepted status codes, additional excluded domains, excluded metadata paths).
  • Enhanced devcontainer support for local linting (docker-in-docker feature + a helper script to run MegaLinter).

Reviewed changes

Copilot reviewed 29 out of 32 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
requirements-docs.txt Adds a docs build dependency pin (Pygments) for the docs toolchain.
lychee.toml Updates Lychee behavior (accepted status codes, exclusions, excluded paths).
docs/UI-UX/recommended-technologies.md Refreshes UI/UX tech links (React/Vite/FAST) and cleans up formatting/TOC indentation.
docs/UI-UX/README.md Updates React/Vite links and minor Markdown formatting cleanup.
docs/source-control/git-guidance/README.md Replaces a dead Git Bash install link with a stable upstream site.
docs/source-control/component-versioning.md Replaces a dead commit-convention reference link with a working alternative.
docs/observability/tools/loki.md Updates Loki “send data” documentation link.
docs/observability/recipes-observability.md Fixes minor spacing/formatting in an Azure SDK link line.
docs/observability/observability-databricks.md Removes a dead GitHub repo link while preserving the referenced text.
docs/design/sustainability/sustainable-engineering-principles.md Migrates principles.green links (and an image) to the new learn.greensoftware.foundation site.
docs/design/sustainability/README.md Updates remaining principles.green references to the new domain.
docs/design/diagram-types/sequence-diagrams.md Removes a dead external “Drawing manually” link while keeping the bullet text.
docs/design/diagram-types/README.md Removes a dead external “Drawing manually” link while keeping the bullet text.
docs/design/diagram-types/deployment-diagrams.md Removes a dead external “Drawing manually” link while keeping the bullet text.
docs/design/diagram-types/component-diagrams.md Removes a dead external “Drawing manually” link while keeping the bullet text.
docs/design/diagram-types/class-diagrams.md Removes a dead external “Drawing manually” link while keeping the bullet text.
docs/design/design-patterns/non-functional-requirements-capture-guide.md Fixes a broken internal relative link to the privacy NFR section.
docs/code-reviews/recipes/markdown.md Updates Plain English link to the current working URL.
docs/code-reviews/recipes/java.md Replaces a dead deep-link to checkstyle config with a stable repo root link.
docs/CI-CD/continuous-integration.md Replaces a dead lean SDLC link with a working equivalent.
docs/automated-testing/unit-testing/README.md Trims trailing whitespace / minor formatting cleanup.
docs/automated-testing/synthetic-monitoring-tests/README.md Updates New Relic Synthetics link to a working URL.
docs/automated-testing/e2e-testing/README.md Updates Ranorex link to a working URL.
docs/automated-testing/cdc-testing/README.md Updates Spring Cloud Contract link to the current docs URL.
docs/agile-development/advanced-topics/collaboration/pair-programming-tools.md Updates Live Share URLs to a working canonical URL.
CONTRIBUTING.md Updates Plain English link to the current working URL.
.projector/workItemTemplates/engineering-fundamentals.yml Fixes a broken site URL (drops /readme/ suffix).
.gitignore Ignores .copilot-tracking/ directory.
.devcontainer/run-megalinter.sh Adds a helper script to run MegaLinter locally via Docker.
.devcontainer/Dockerfile Updates base image reference and removes stale Yarn apt source that breaks apt-get update.
.devcontainer/devcontainer.json Adds docker-in-docker feature and updates VS Code customization structure + postCreate command.
.devcontainer/devcontainer-lock.json Locks the devcontainer feature version/digest for reproducibility.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

`semantic-release` relies on commit messages to assess how codebase changes impact consumers. By adhering to structured conventions for commit messages, `semantic-release` autonomously identifies the subsequent semantic version, compiles a changelog, and releases the software.

[Angular Commit Message](https://gist.github.com/brianclements/841ea7bffdb01346392c) Conventions serve as the default for `semantic-release`. However, the configuration options of the @semantic-release/commit-analyzer and @semantic-release/release-notes-generator plugins, including presets, can be adjusted to modify the commit message format.
[Angular Commit Message](https://www.conventionalcommits.org/en/v1.0.0/) Conventions serve as the default for `semantic-release`. However, the configuration options of the @semantic-release/commit-analyzer and @semantic-release/release-notes-generator plugins, including presets, can be adjusted to modify the commit message format.
Comment thread lychee.toml
Comment on lines +53 to +56
# 403 (Forbidden) and 429 (Too Many Requests) are accepted because they indicate
# the target page exists but the host blocks or throttles automated clients in
# CI. Treating them as failures produces false positives for live links.
accept = ["200..=299", "403", "429"]

- End of day checked-in code should contain unit tests at the minimum.
- Run the build locally before checking in to avoid CI pipeline failure saturation. You should verify what caused the error, and try to solve it as soon as possible instead of committing your code. We encourage developers to follow a [lean SDLC principles](https://leankit.com/learn/lean/principles-of-lean-development/).
- Run the build locally before checking in to avoid CI pipeline failure saturation. You should verify what caused the error, and try to solve it as soon as possible instead of committing your code. We encourage developers to follow a [lean SDLC principles](https://en.wikipedia.org/wiki/Lean_software_development).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants