aaf8df2206
Accessibility (Pa11y live) / a11y (push) Has been cancelled
Вскрылось при приёмке починки 92 битых ссылок. Пуш прошёл, а сторож промолчал. Стал разбираться — оказалось хуже, чем «в рабочей подпапке не запускается». Замер, а не догадка. Одна и та же команда: руками — 2242 ссылки под lefthook — 183 ссылки Сумма сходится ровно: 95 корневых .md + 3 в db + 85 на ОДИН уровень под docs. То есть образец docs/**/*.md под хуком схлопывался до docs/*/*.md. Не проверялись ни docs/*.md, ни всё глубже второго уровня — docs/superpowers/specs, plans, audits, findings, runbooks и docs/observer/notes. Именно там лежали 88 из 92 битых ссылок. Сторож годами показывал зелёное, потому что не смотрел туда, где было грязно. Лечение: отдать lychee каталоги и фильтр по расширению вместо shell-образца — он обходит дерево сам, без участия оболочки. Так же выправлена ручная команда npm run links, чтобы она и хук проверяли одно и то же. Проверено вырезанием защиты, а не рассуждением. В docs подложена заведомо битая ссылка: старый вариант — 183 ссылки, 0 ошибок, пуск разрешён. Не увидел. новый вариант — 2243 ссылки, 1 ошибка, возврат 1. Остановил бы пуш. После уборки подложки — 2242 ссылки, 0 ошибок, возврат 0. Вторая находка того же захода: в рабочих подпапках-worktree хук вообще не запускался — писал «Can't find lefthook in PATH» и пропускал пуш с успешным кодом. Причина: сгенерированный хук ищет двоичный файл только в node_modules той папки, откуда его позвали, а в подпапках их нет. Лечится вне хранилища — lefthook поставлен глобально и положен в PATH, теперь находится из любой папки. Проверено: из подпапки хук стартует и отрабатывает обе работы. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
50 lines
2.3 KiB
JSON
50 lines
2.3 KiB
JSON
{
|
|
"name": "liderra",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "Лидерра — SaaS CRM (фаза 0: документация и HTML-прототипы)",
|
|
"scripts": {
|
|
"lint:md": "markdownlint-cli2 \"docs/**/*.md\" \"db/**/*.md\" \"*.md\" \"!docs/superpowers/**\" \"!docs/observer/STATUS.md\"",
|
|
"lint:md:fix": "markdownlint-cli2 --fix \"docs/**/*.md\" \"db/**/*.md\" \"*.md\" \"!docs/superpowers/**\" \"!docs/observer/STATUS.md\"",
|
|
"spell": "cspell --no-progress --show-suggestions \"docs/**/*.md\" \"db/**/*.md\" \"*.md\" \"web/**/*.html\"",
|
|
"links": "bin\\lychee.exe --config .lychee.toml --extensions md docs db *.md",
|
|
"lint:css": "stylelint \"web/**/*.html\"",
|
|
"lint:sql": "bin\\squawk.exe db/schema.sql",
|
|
"format:sql:check": "perl -I bin/pgFormatter/lib bin/pgFormatter/pg_format db/schema.sql > db/.schema-formatted.tmp.sql && diff -q db/schema.sql db/.schema-formatted.tmp.sql || echo \"pgFormatter would reformat — run npm run format:sql to apply\"",
|
|
"format:sql": "perl -I bin/pgFormatter/lib bin/pgFormatter/pg_format -o db/schema.sql.formatted db/schema.sql && echo \"Wrote db/schema.sql.formatted — review diff before replacing source\"",
|
|
"a11y": "pa11y-ci --config pa11y.config.json",
|
|
"a11y:handoff": "pa11y-ci --config pa11y-handoff.config.json",
|
|
"check:docs": "run-p lint:md spell links a11y",
|
|
"sast": "semgrep --config=p/php --config=p/javascript --config=p/typescript --config=p/secrets --config=.semgrep.yml --error --time",
|
|
"eval:llm": "promptfoo eval -c docs/ml/promptfoo-example/promptfooconfig.yaml",
|
|
"brain:dashboard": "node tools/brain-dashboard-server.mjs",
|
|
"test:tools": "cd app && npx vitest run --config vitest.config.tools.mjs"
|
|
},
|
|
"devDependencies": {
|
|
"@cspell/dict-en_us": "^4.4.33",
|
|
"@cspell/dict-ru_ru": "^2.3.2",
|
|
"cspell": "^10.0.0",
|
|
"lefthook": "^2.1.8",
|
|
"markdownlint-cli2": "^0.22.1",
|
|
"npm-run-all2": "^8.0.4",
|
|
"pa11y": "^9.1.1",
|
|
"pa11y-ci": "^4.1.0",
|
|
"postcss-html": "^1.8.1",
|
|
"promptfoo": "^0.121.11",
|
|
"stylelint": "^17.11.0",
|
|
"stylelint-config-standard": "^40.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.0.0"
|
|
},
|
|
"overrides": {
|
|
"pa11y-ci": {
|
|
"lodash": "^4.17.21"
|
|
}
|
|
},
|
|
"dependencies": {
|
|
"@xenova/transformers": "^2.17.2",
|
|
"shell-quote": "^1.8.1"
|
|
}
|
|
}
|