Skip to content

linkcheck has been red for 13 months, hiding two other broken links #62

Description

@mmcky

linkcheck.yml has never passed in this repository's retained run history, and the single dead link causing it is hiding two other genuinely broken links on published pages.

Surfaced while repointing mle.md's data download in #61, whose CI went red for reasons unrelated to that PR.

The check is not flaky — it has never been green

Queried via gh api --paginate .../workflows/linkcheck.yml/runs: 64 retained runs, 64 failures, zero successes, oldest retained 2025-06-27. That is over 13 months of a red check. It also fails on unrelated pull requests — four dependabot branches on 2026-08-10, and #61 — because the workflow triggers on pull_request: [opened, reopened] as well as the daily 0 12 * * * cron.

The finding set is stable, not intermittent: runs 31595997149 (2026-08-12) and 31387608029 (2026-08-10) are byte-identical. 58 working, 39 unchecked, 3 redirected, 2 broken.

What is actually broken

1. lectures/troubleshooting.md:68https://discourse.quantecon.org/ does not resolve.

The forum was deliberately retired in March 2025 (announced in QuantEcon/website #157). The DNS record is gone entirely — host returns NXDOMAIN, not a missing A record — so the failure is NameResolutionError rather than a 404.

There is no replacement forum to point at: the closure announcement said QuantEcon "will be evaluating new platforms", the Hivebrite evaluation was declined, and GitHub Discussions is disabled on every public QuantEcon repo except meta. So the fix is to delete the sentence, not substitute a URL — and that is exactly what QuantEcon/lecture-python.myst did in commit 19a6874, which removed the line outright and left the issue tracker and contact@quantecon.org as the remaining feedback routes. lecture-python-intro and lecture-python-advanced.myst are already clean the same way. This repo is drift from a fix that was applied to three repos and never swept.

2. lectures/wald_friedman.md:761 — nbviewer 404, and it is a one-word fix.

The link is https://nbviewer.org/github/QuantEcon/lecture-python.notebooks/blob/master/wald_friedman.ipynb. The branch segment says master; that repository's default branch is main. The notebook exists (72,661 bytes) and the same URL with /main/ returns 200. Independently reproduced with curl. This has been sitting behind the red check the entire time.

3. lectures/troubleshooting.md:63 — the issue-tracker link lands on an archived, read-only tracker.

https://github.com/QuantEcon/lecture-python/issues redirects to https://github.com/QuantEcon/lecture-python.rst/issues, and that repository is archived. Readers cannot open an issue there.

Reported as a redirect rather than as broken, so linkcheck will not fail on it — but combined with item 1 it means both feedback routes this page offers are dead ends: the forum does not resolve, and the tracker does not accept.

Suggested fix

All three are in two files and can land in one PR, after which the check should go green:

File Line Change
lectures/troubleshooting.md 68 delete the discourse sentence (follow lecture-python.myst@19a6874)
lectures/troubleshooting.md 63 repoint the tracker to this repository's own issues
lectures/wald_friedman.md 761 mastermain in the nbviewer URL

Two notes for whoever picks this up

Merging will not clear the live site. This repo publishes on a publish* tag, so stats.quantecon.org keeps serving the current build — and the dead link — until a publish is tagged. The generated lecture-stats.notebooks mirror regenerates at that same moment.

The boilerplate problem is wider than this repo, and is tracked upstream. An org-wide sweep found discourse.quantecon.org in 55 repositories / 165 lines, including 13 lecture-series repos and 11 live published pages. The issue-tracker defect in item 3 is also boilerplate-wide — 9 of 12 live troubleshooting.md files point at the same archived tracker. That whole surface is QuantEcon/meta#356; this issue is deliberately scoped to the one repository where a check is actually red and the fix needs no decision from anyone.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions