Files
OmniRoute/config/quality/dependency-allowlist.json
Diego Rodrigues de Sa e Souza 831bd0a7b3 feat(quality): make the a11y gate real (@axe-core/playwright in nightly) (#4321)
* feat(quality): instala @axe-core/playwright + allowlist (T13)

Pré-requisito do gate de a11y real. O spec tests/e2e/a11y.spec.ts já tem o
mecanismo REQUIRE_AXE=1 que falha se o pacote estiver ausente quando exigido —
faltava só o pacote + o job nightly + o baseline real.

- @axe-core/playwright@^4.11.3 em devDependencies (via --package-lock-only,
  não toca o node_modules compartilhado das worktrees)
- adicionado à dependency-allowlist (check:deps OK, 127 deps)
- vuln-ratchet OK (1 moderate pré-existente, baseline 10 — axe não regride)

* feat(quality): job a11y nightly (REQUIRE_AXE=1) + gate per-PR (T13)

- novo job 'a11y' em nightly-resilience.yml: o webServer do Playwright builda o
  Next (build-next-isolated.mjs) e sobe o standalone sozinho (sem artefato pré-
  buildado como o test-e2e do ci.yml), REQUIRE_AXE=1 roda a análise axe real.
- gate de nightly no spec: a11y.spec.ts é casado pelo glob 'tests/e2e/*.spec.ts'
  do job per-PR (9 shards); sem gate, instalar @axe-core/playwright ligaria axe
  em TODO PR (e falharia em baseline 0). Os 4 testes de página agora skipam a
  menos que REQUIRE_AXE=1 — per-PR fica rápido/verde, nightly roda real.
- zizmor 139->145: +3 drift pré-existente da base a23d0d678 (release fast-path
  não ratcheta workflows) + 3 do job novo (checkout/setup-node/cache @vN, mesma
  convenção deliberada e INTOCADA de todos os workflows). Ver nota no baseline.

* feat(quality): congela baseline real de violações a11y (T13)

Medido no primeiro run nightly (27852779527, REQUIRE_AXE=1): /login=1,
/dashboard=4, /dashboard/providers=3, /dashboard/settings=5. O webServer
buildou+subiu o app e o axe rodou nas 4 páginas; a falha do run foi só o
assert vs baseline 0 (esperado), não infra.
2026-06-19 21:43:51 -03:00

133 lines
2.6 KiB
JSON

{
"_comment": "Allowlist anti-slopsquatting (check-deps.mjs). Toda dep nova exige adicao EXPLICITA aqui apos verificar que e legitima.",
"allowed": [
"@atjsh/llmlingua-2",
"@aws-sdk/client-bedrock-runtime",
"@axe-core/playwright",
"@cyclonedx/cyclonedx-npm",
"@dnd-kit/core",
"@dnd-kit/sortable",
"@dnd-kit/utilities",
"@huggingface/transformers",
"@lobehub/icons",
"@modelcontextprotocol/sdk",
"@monaco-editor/react",
"@ngrok/ngrok",
"@opencode-ai/plugin",
"@playwright/test",
"@size-limit/file",
"@stryker-mutator/core",
"@stryker-mutator/tap-runner",
"@swc/helpers",
"@tailwindcss/postcss",
"@tensorflow/tfjs",
"@testing-library/jest-dom",
"@testing-library/react",
"@types/bcryptjs",
"@types/better-sqlite3",
"@types/bun",
"@types/keytar",
"@types/mdx",
"@types/node",
"@types/react",
"@types/react-dom",
"@types/ws",
"@vitejs/plugin-react",
"@xyflow/react",
"axios",
"bcryptjs",
"better-sqlite3",
"bottleneck",
"c8",
"clsx",
"commander",
"concurrently",
"cross-env",
"csv-stringify",
"dpdm",
"electron",
"electron-builder",
"electron-updater",
"eslint",
"eslint-config-next",
"eslint-plugin-sonarjs",
"express",
"fast-check",
"fetch-socks",
"fflate",
"fumadocs-core",
"fumadocs-mdx",
"fumadocs-ui",
"glob",
"http-proxy-middleware",
"https-proxy-agent",
"husky",
"ink",
"ink-spinner",
"ink-text-input",
"ioredis",
"jose",
"js-tiktoken",
"js-yaml",
"jscpd",
"jsdom",
"jsonc-parser",
"keytar",
"knip",
"license-checker-rseidelsohn",
"lint-staged",
"lockfile-lint",
"lowdb",
"lucide-react",
"marked",
"marked-terminal",
"material-symbols",
"mermaid",
"monaco-editor",
"next",
"next-intl",
"next-themes",
"node-loader",
"node-machine-id",
"open",
"ora",
"parse5",
"pino",
"pino-abstract-transport",
"pino-pretty",
"playwright",
"prettier",
"react",
"react-dom",
"react-is",
"react-markdown",
"react-reconciler",
"recharts",
"selfsigned",
"size-limit",
"socks",
"sql.js",
"sqlite-vec",
"tailwind-merge",
"tailwindcss",
"tls-client-node",
"tsup",
"tsx",
"type-coverage",
"typescript",
"typescript-eslint",
"undici",
"update-notifier",
"uuid",
"vitest",
"wait-on",
"wreq-js",
"ws",
"wtfnode",
"xxhash-wasm",
"yazl",
"zod",
"zustand"
]
}