diff --git a/scripts/__tests__/check-doc-links.test.ts b/scripts/__tests__/check-doc-links.test.ts index effa10c5a2..e29921e84c 100644 --- a/scripts/__tests__/check-doc-links.test.ts +++ b/scripts/__tests__/check-doc-links.test.ts @@ -883,7 +883,8 @@ describe("this repo's own GitHub blob/tree URLs are resolved offline — objectu it('reports the #3507 shape: a tree/main URL to a deleted example', () => { // `examples/crm` and `examples/todo` were deleted in 12b287d8b and the two // links to them stayed dead about three months: this script skipped them by - // scheme, and lychee (weekly cron, continue-on-error) gates nothing. + // scheme, and lychee (`schedule` + `workflow_dispatch`, no PR trigger) blocks + // nobody. expect( rejections({ ...SITE_FIXTURE, diff --git a/scripts/check-doc-links.mjs b/scripts/check-doc-links.mjs index af2a83bab5..df785615be 100644 --- a/scripts/check-doc-links.mjs +++ b/scripts/check-doc-links.mjs @@ -154,11 +154,15 @@ * `https://github.com/objectstack-ai/objectui/(blob|tree)/main/` is an * in-repo reference wearing an external URL's clothes, and it fell between the * two gates (#3507): this script skipped it by scheme, and lychee — the only - * thing that would resolve it — is a weekly cron with `continue-on-error`, so - * it gates nothing. Two such links stayed dead for about three months. The - * backlog was cleared to zero by PR #3509 (25 distinct targets swept, exactly - * the 2 dead), and PR #3506 then introduced 8 more of the shape with nothing - * checking them. This closes that: `` must exist in the working tree. + * thing that would resolve it — is a `schedule` + `workflow_dispatch` workflow + * with no PR trigger, so it blocks nobody. (It is `fail: true`, not a + * soft-failing job: what keeps it off pull requests is the absent trigger, not + * a tolerated failure. #3213 ruling B says keep it that way — uncommenting + * `pull_request:` would turn it into a hard gate over the network.) Two such + * links stayed dead for about three months. The backlog was cleared to zero by + * PR #3509 (25 distinct targets swept, exactly the 2 dead), and PR #3506 then + * introduced 8 more of the shape with nothing checking them. This closes that: + * `` must exist in the working tree. * * It applies to **every** surface, `content/docs` included — the shape is * decidable wherever it is written, and the `escapes-collection` hint above @@ -765,10 +769,6 @@ function judgeHref(href, context) { // and judge what is left with the same `routeExists()` every absolute href // goes through — so `/docs` strictness and the `apps/site` route table apply // here too, on every surface, `content/docs` included. - // A URL on this site is an internal route wearing an origin. Strip the origin - // and judge what is left with the same `routeExists()` every absolute href - // goes through — so `/docs` strictness and the `apps/site` route table apply - // here too, on every surface, `content/docs` included. const siteRoute = siteAbsoluteRoute(href); if (siteRoute !== null) { return routeExists(siteRoute, context) ? null : 'site-absolute-url';