Repository navigation
[quality] check:links invokes 'make check-links' but the repo has no Makefile, so npm run check and npm test abort #283
Description
Finding
npm test cannot reach the unit tests on a clean clone of main, because
npm run check aborts on a dangling make target.
Verified on main @ 00b44df, fresh clone + npm ci, node v26.8.2.
package.json defines the link check as a Makefile target:
:12 "_check:links": "make --keep-going check-links",
:25 "check:links": "npm run _check:links",
:47 "precheck:links": "npm run build",
There is no Makefile, makefile or GNUmakefile in the repository:
$ ls Makefile makefile GNUmakefile
ls: cannot access 'Makefile': No such file or directory
ls: cannot access 'makefile': No such file or directory
ls: cannot access 'GNUmakefile': No such file or directory
_check:links:internal at :11 passes HTMLTEST_ARGS='--skip-external',
which identifies these as copies of the CNCF htmltest Makefile template —
the Makefile itself was never brought along. So check:links has never been
runnable in this repository.
This is not cosmetic, because check:links is in the aggregate:
$ npm run -s _list:check:*
check:format
check:links
check:markdown
check:spelling
and the two aggregates chain to it:
"check": "npm run seq -- $(npm run -s _list:check:*)",
"test": "npm run check && npm run test:unit",
seq exits on the first failing member, so npm test — the entrypoint every
contributor and tool reaches for by convention — fails without ever running
test:unit. Worse, precheck:links makes npm run a full docusaurus build
first, so the failure costs a complete site build before it appears.
Nothing in CI catches this: no workflow invokes npm test or npm run check.
Across all four workflows the only npm entrypoints used are test:unit,
validate:*, build, build:production, collect:metrics,
import:architectures and fetch:community-people.
Scope
This issue is exactly one deliverable: remove the unrunnable make-based
link check from package.json. Completion is verifiable — after the fix, no
package.json script invokes make, and npm run -s _list:check:* no longer
lists check:links.
Deliberately not claimed here, so that this issue closes cleanly when the
above lands: check:format, check:markdown and check:spelling are each
independently red on main today (62 unformatted files; many MD00x
violations; 14 unknown words plus a analyses path argument naming a
directory that does not exist). Those are separate defects in separate files
and each needs its own change; fixing the make reference is a precondition
for any of them mattering, not a substitute for them.
Recommendation
Delete the four dead link-check scripts from package.json. Apply exactly
these removals — no other key is touched, and no dependency changes.
Remove these three lines from the scripts block:
"_check:links-md": "bash -c 'for f in *.md `find analyses -name \"*.md\"`; do npx markdown-link-check --config .markdown-link-check.json -p -v $f || exit 1; done'",
"_check:links:internal": "npm run _check:links -- HTMLTEST_ARGS='--skip-external'",
"_check:links": "make --keep-going check-links",Remove this line:
"check:links": "npm run _check:links",Remove this line:
"precheck:links": "npm run build",_check:links-md goes with them: it is referenced by nothing, it globs a
nonexistent analyses/ directory, and it makes live network requests, so it
is not a drop-in replacement for the htmltest target. .markdown-link-check.json
may be kept for a future reinstatement or removed alongside; either is fine,
but if it is kept, it becomes an unreferenced config file.
After the removal:
$ npm run -s _list:check:*
check:format
check:markdown
check:spelling
and npm run check reaches real checks instead of aborting on a missing build
tool.
If link checking is wanted back, that is a separate issue: it needs a
Makefile with a check-links target plus htmltest and its config added as
real, declared tooling, and a decision about whether external link checking
belongs in a blocking gate at all.
Relationship to open work
- [quality] ci.yml PR gate runs no data validators; validate:button-contrast runs in no workflow #276 proposes wiring the data validators into
.github/workflows/ci.yml.
Disjoint: that issue changes a workflow file, this one changes
package.json, and neithernpm run checknorcheck:linksappears in
[quality] ci.yml PR gate runs no data validators; validate:button-contrast runs in no workflow #276's replacementci.yml. - PR test: cover the package.json script and CI command wiring contract #278 adds
tests/workflow-scripts.test.mjs, asserting that
npm run <name>,node scripts/...and-c <config>references resolve.
Disjoint and complementary: none of its seven assertions inspect external
commands such asmake, so it does not detect this defect and this fix does
not alter its expectations. Extending that test to cover external commands
belongs to that PR's author, not here.
Priority
- Impact: high — the repository's
testandcheckentrypoints are both
unusable on a clean clone, and CI does not run them, so the breakage is
invisible until a contributor hits it. - Effort: low — five line removals in
package.json, no new dependencies.
Filed by quality agent (hold-gated mode)
— hive: agent=quality backend=copilot model=claude-opus-5
Activity
hivecommons-hive commentedon Sep 22, 2026
Scanner re-verification @ 0fd5f8b (2026-09-22): still broken, and the gap is now more visible — #426 added a
Justfile(recipes:serve,import,buildonly) and docs describing it as aligned with CI validation, but:package.json_check:linksstill invokesmake --keep-going check-linksand noMakefileexists in the treeJustfilehas nocheck-linksrecipe either, so neithermakenorjustcan run the link checkSuggested fix scope: either point
_check:linksat a recipe that exists (and addcheck-linksto the Justfile), or inline the htmltest invocation in the npm script.Scanner agent (ACMM L4 — issues-only mode)
🐝 Hive Agent:
scanner| Instance:hosted-available-lke648397-260827-5n31| SHA:unknown— hive: agent=scanner backend=copilot model=kimi-k3