Skip to content

chore(app-shell): the dead slot refreshKey parameter is removed (#4549) #1294

chore(app-shell): the dead slot refreshKey parameter is removed (#4549)

chore(app-shell): the dead slot refreshKey parameter is removed (#4549) #1294

Workflow file for this run

name: Docs Links
# Why this is its own workflow instead of a step in `ci.yml`'s `docs` job, which
# is where this check lived when it first reached CI (#3213 / #3292, PR #3450):
# `ci.yml` THEN listed `'**/*.md'`, `content/**`, `docs/**` and `apps/site/**`
# under the `paths-ignore` of both its triggers, and GitHub has no per-job path
# filter. The published site is built from `content/docs/**`, so a docs-ONLY
# pull request matched every ignore pattern, started no workflow at all, and was
# never link-checked — while a docs-only PR is the likeliest way an internal link
# breaks in the first place. The step therefore only ever saw PRs that touched
# docs *alongside code*, plus pushes to `main`; a broken link could land through
# a pure-docs PR and only turn `main` red later, under an unrelated author
# (#3448).
#
# Read that paragraph as history, and do not act on its present tense — the
# lead-in used to be written as one, which is what objectui#4381 corrected.
# objectui#3523 step 2 deleted `paths-ignore` from `ci.yml`'s `pull_request`
# trigger; it survives ONLY on `push`. A docs-only PR therefore DOES start
# `ci.yml` today and DOES produce its contexts — measured: PR #3856 (one markdown
# file) 16 checks, PR #4339 (one line added to AGENTS.md) 17. objectui#3857
# pinned that correction after an author acted on the old sentence and got the
# opposite result. Nor would the in-job switch keep a link check out the way it
# keeps the changeset gates out: `ci.yml`'s `docs` job gates its steps on
# `apps/site/` or `content/` having CHANGED, which a docs-only PR satisfies.
#
# Two reasons outlived that premise, and they are why nothing moves back.
# `ci.yml` still filters its `push` lane, so a docs-only push to `main` starts it
# not at all and this workflow is the only thing that link-checks that merge. And
# #3448 settled one gate, one home: this workflow's trigger set is a strict
# superset of that job's, so a copy there could only add a second red check for
# one broken link, and a second place to forget.
#
# `control-bytes.yml` hit the same wall and its header names the consequence: a
# gate that cannot see a markdown-only PR "rebuilds the hole it exists to close".
# `changeset-guard.yml` is the second instance of the shape in this repo.
#
# Hence: no `paths` and no `paths-ignore` here, deliberately.
# `scripts/__tests__/docs-links-workflow.test.ts` fails if either is ever added.
# A `paths: content/**` filter would look tighter and buy nothing measurable: the
# whole run is a checkout plus one `node` call — no install, no network, a few
# seconds — and the filter would be a second, drift-prone copy of the script's
# own scan surface. Keep it that way if you add checks here.
on:
pull_request:
branches: [main, develop]
push:
branches: [main, develop]
# Merge queue (objectui#3523 — see `ci.yml`'s trigger block for the full note
# and the measurements behind it). This repository's queue is enforced by a
# ruleset but had zero `merge_group` subscribers, so its required-check set
# could only ever be empty. This gate is one of the two the audit found safe
# to require today — deliberately unfiltered, so it reports on every shape of
# pull request — and a required check that does not report on a queue build
# stalls the queue until the ruleset's 60-minute timeout fails it. `types:` is
# named although `checks_requested` is currently the only one GitHub defines.
merge_group:
types: [checks_requested]
workflow_dispatch:
concurrency:
group: docs-links-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
docs-links:
name: Internal Docs Link Check
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '22.x'
# Resolves every relative / `/docs/...` markdown link found in
# `content/docs/**` against the files actually on disk. Reads the checkout
# and nothing else, so no install is required. External URLs are a
# different problem with a different tool — Lychee, in `check-links.yml`,
# which sweeps both `content/docs/` and `docs/` on a weekly cron and on
# demand, and deliberately gates nothing (#3449 fixed its scope; #3213
# decided it stays off pull requests).
- name: Check internal docs links
run: node scripts/check-doc-links.mjs