chore(release): v0.3.0, since BADGE-DEAD-LINK is a new check

Same precedent as v0.2.0: a new check is a minor bump, not a patch.
Bundles this session's three fixes (LINK-DEAD false positive,
widened 429 backoff, BADGE-DEAD-LINK) and the tautological-test
correction.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W1ZJFViVYpr8cvf4fs91j1
This commit is contained in:
Kjell Tore Guttormsen 2026-08-04 22:29:02 +02:00
commit f28615f3b6
4 changed files with 35 additions and 3 deletions

View file

@ -1,6 +1,6 @@
{
"name": "repo-standard",
"version": "0.2.2",
"version": "0.3.0",
"description": "Per-repo gate for the open/ presentation standard: README first screen, install block, files required by the repo's class, and dead repo references.",
"author": {
"name": "Kjell Tore Guttormsen"

View file

@ -4,6 +4,38 @@ All notable changes to this project are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
versioning is [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.3.0] — 2026-08-04
### 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()`.
## [0.2.2] — 2026-08-04
### Fixed

View file

@ -10,7 +10,7 @@ checks that surface in one repository and reports what it finds.
*AI-generated: all code produced by Claude Code through dialog-driven development.*
![Version](https://img.shields.io/badge/version-0.2.2-blue)
![Version](https://img.shields.io/badge/version-0.3.0-blue)
![Platform](https://img.shields.io/badge/platform-Claude_Code_Plugin-purple)
![Skills](https://img.shields.io/badge/skills-1-orange)
![License](https://img.shields.io/badge/license-MIT-lightgrey)

View file

@ -1,6 +1,6 @@
{
"name": "repo-standard",
"version": "0.2.2",
"version": "0.3.0",
"private": true,
"type": "module",
"engines": {