playrote.play.v1

cchinmoy/link-rotv0.4.0Public

Link rot

Requests every external URL a repository's documentation hands a reader and reports which no longer resolve, and resolves every relative link and in-page anchor against the tracked file list with no network at all.

Read the full description

7 probes read tracked docs and project manifests such as package.json homepage, pyproject [project.urls] and FUNDING.yml, then contact each URL with HEAD and fall back to GET, following redirects and recording the chain. It flags dead status codes, pages that redirect to the site root so the linked content is gone while the link still answers 200, and permanent moves the documentation should name instead. Offline it still reports a relative link or image pointing at a path git does not track, a path that differs from a tracked one only in case so it 404s on GitHub and Linux CI while working on a Mac, a file that exists only untracked, and an anchor no heading slugs to. Placeholder hosts, template URLs carrying a {slot}, and rate-limited 429 responses are never reported as dead. It does not verify t

  • Published 4 Sep 2026
  • Downloads 4
  • Needs rote 0.62.0+
  • Digest sha256:c014b144bf46…
  • Reference chinmoy/link-rot@0.4.0

Before you run it2 local tools

Everything here is checked on your machine when rote inspects the play. This page never learns what you have installed or which credentials you hold.

  • ○
    gitlocal tool

    Requires >=2.20.0. Run rote play inspect to check your host; unverified versions remain unknown.

  • ○
    python3local tool

    Requires >=3.8.0. Run rote play inspect to check your host; unverified versions remain unknown.

Inputs10, all optional

rote asks for these before running and shows the defaults it will use.

  • Pathpath

    Work tree whose documentation is checked. The default '.' resolves to the directory the run started in, so a zero-argument run checks the repository you are standing in; pass an absolute path to check a checkout somewhere else. Only tracked files are read, because a scratch note that was never committed is not something a stranger receives.

    optionalstringdefault .custom value allowed
  • Docsdocs

    Comma-separated globs naming the documents whose links a reader is handed. The default covers the files a newcomer opens first plus everything under docs/, and bare globs apply at the repository root only so a stray markdown file deep in a vendored tree is not treated as documentation. Pass an empty value to check manifest URLs alone.

    optionalstringdefault README*,CONTRIBUTING*,docs/**,*.mdcustom value allowed
  • Timeout mstimeout_ms

    Per-URL budget before a host is called unreachable. The default 8000 keeps a normal repository under half a minute, and a URL that times out is retried once at double the budget before being reported, because a slow-but-alive blog should not be listed as broken.

    optionalintegerdefault 8000custom value allowed
  • Concurrencyconcurrency

    How many URLs are requested at once, capped at 16. The default 8 is chosen so a README with fifty links finishes in seconds without looking like a scraper to any single host; lower it to 2 or 3 when every link points at one domain that rate-limits.

    optionalintegerdefault 8custom value allowed
  • Check relativecheck_relative

    Whether repository-relative links, images and in-page anchors are resolved against the tracked file list. This is a real behaviour change, because through 0.3.2 this play stated in writing that relative links and anchors were never contacted, and the default true now decides them - a link or image pointing at a path git does not track, a path differing from a tracked one only in case so it works on macOS and 404s on GitHub and Linux CI, a path that exists only as an untracked file the author alone can see, and an anchor no heading in the document slugs to. None of it needs a network, so it answers on a plane and in CI with egress blocked. A link to a directory that exists, one carrying a query string, mailto and tel, and anything under .github/ are never reported. Set false to restore the 0.3.2 behaviour of checking external URLs alone.

    optionalbooleandefault truecustom value allowed
  • Check badgescheck_badges

    Whether shield and coverage badge images are contacted as well as ordinary links. The default true includes them, since a badge pointing at a deleted CI project is exactly the kind of quiet rot that makes a README look abandoned; set false to check only the links a reader would click.

    optionalbooleandefault truecustom value allowed
  • Max urlsmax_urls

    Upper bound on how many URLs are contacted. The default 200 covers almost every repository, and when the bound is hit first-screen links are kept preferentially and the report states how many were counted but not checked, rather than quietly under-reporting.

    optionalintegerdefault 200custom value allowed
  • Ignore hostsignore_hosts

    Comma-separated hostnames to skip entirely. The default is empty because placeholder and loopback hosts are already excluded automatically; add a host here when it blocks automated requests and produces an inconclusive result you have already investigated.

    optionalstringcustom value allowed
  • In codein_code

    Whether URLs inside fenced code blocks are contacted. The default false skips them, because a URL in an example command is usually illustrative and requesting it produces noise rather than a finding; set true when your documentation puts real endpoints in code fences.

    optionalbooleandefault falsecustom value allowed
  • Severityseverity

    Which findings reach the report: all, or critical. The default all keeps the warnings and the inconclusive results, because a permanent redirect and a host that refuses automated requests are both worth seeing once; use critical for only what a reader will actually find broken.

    optionalstringdefault allcustom value allowed

What it changes

No write operations are declared in this version's manifest.

Credentials remain in the recipient's local rote vault; this page and the publisher never receive them.

Runtime details
  • rote CLIversion 0.62.0 or newer
  • Servicesnone declared
  • Digestsha256:c014b144bf46d0d1259dbf9103fdeffdc5c15e968a3ed7d15290de6fc6a8c5a8
  • Archive size30988 bytes
  • Published2026-09-04T07:54:05.232664+00:00
  • Published withrote 0.78.0

Credential values and current readiness remain local. Opening this page never prompts for a credential, opens an authorization browser, or calls a service this play uses.

A play is a published, versioned automation package that runs on your own machine through rote, a free command-line tool. Opening this page installs nothing and runs nothing.