• v0.3.0 f28615f3b6

    v0.3.0 Stable

    ktg released this 2026-08-04 20:29:12 +00:00 | 39 commits to main since this release

    Added

    • BADGE-DEAD-LINK: a linked badge making a run claim ("tests", "build",
      "CI", "passing") is now resolved against the repo's tracked files when the
      link target is relative. Being wrapped in a link previously ended all
      scrutiny — the link-target capture group was missing from the regex
      outright, so a badge linked to a dead relative path passed silently.
      External targets (the ordinary case — a CI provider) still need the
      network and stay out of scope, same precedent as checkInternalLinks.

    Fixed

    • LINK-DEAD false positive on API endpoint paths: URL_REF matched
      open/<name> anywhere in a URL, so a Forgejo API call like
      .../api/v1/orgs/open/repos read as a dead reference to a repo named
      "repos". open must now be the first path segment after the host,
      matching how every real repo URL is shaped. Measured twice against the
      catalog's own RUNBOOK.md.
    • 429 backoff was tuned for a hard IP ban that does not exist. Measured
      directly against the live forge: nginx never sends Retry-After (the
      branch handling it is dead code in practice), the limit is a leaky bucket
      that can take up to ~15s to drain, and it is IP-based rather than
      token-quota-based — a valid token made no difference. fetchWithRetry now
      defaults to a 23s worst-case budget (retries: 5, maxDelayMs: 8000), up
      from 7s. CLAUDE.md's "13 calls in a loop" explanation corrected to match.
    • Two tests asserted facts about their own local test fixture instead of the
      real register/repos.json — a typo in the real register would have
      drifted past them silently. Both now read the live register via
      loadRegister().
    Downloads