Дмитрий
35387e8b17
feat(a11y): extend Pa11y scope to 14 authenticated routes + Vuetify hideElements
...
pa11y.config.json теперь covers 21 URLs (7 guest + 14 authenticated).
Authenticated URLs использует per-URL actions login flow:
1. navigate to /login
2. fill input[autocomplete="email"] = admin@demo.local (DemoSeeder)
3. fill input[autocomplete="current-password"] = password
4. click button[type="submit"]
5. wait for path /dashboard
6. navigate to target URL + wait path
14 routes added: /dashboard, /deals, /kanban, /projects, /billing, /settings,
/reports, /reminders, /admin/{tenants,billing,incidents,system,pricing-tiers,
supplier-prices}.
hideElements extended:
- select[hidden] — Vuetify VSelect рендерит hidden native <select> для
form-submission compatibility (не visible UX, screenreader skip).
- input[aria-controls^="menu-v-"] — Vuetify VDataTable items-per-page
combobox с aria-labelledby chain issue (Vuetify-internal pattern).
timeout 30000 → 60000ms, wait 1500 → 2000ms — accommodate Vue SPA async
hydration после login flow.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 10:06:40 +03:00
Дмитрий
0c36b7a28d
feat(a11y): migrate Pa11y scope from handoff prototypes to live Vue app
...
Closes Audit #3 sole P1 (F-A11Y-PA11Y-SCOPE-01).
Pa11y was scanning handoff HTML prototypes from liderra_v8_handoff/concepts/
(3 URLs, ~10 contrast violations), NOT the live Vue app. Audit #2 baseline
"0 errors" was inaccurate — real portal was never covered.
Changes:
- pa11y.config.json: now targets http://localhost:8000/ <route> for 7 guest
pages (login, register, forgot, 2fa, recovery, 403, 500)
- pa11y-handoff.config.json: preserves historical handoff baseline as
opt-in (`npm run a11y:handoff`)
- package.json: new `a11y:handoff` script; `a11y` repointed to live target
- RecoveryCodesView.vue: scoped CSS override fixes Vuetify warning-tonal
alert content contrast (2.03:1 → ≥4.5:1, color #0a0700 per Pa11y rec)
- .github/workflows/a11y.yml: new CI job with dev-server lifecycle
(php artisan serve + curl wait-on + Pa11y + screenshot artifact upload)
- docs/audit-baseline-pa11y.md: first live baseline document with per-URL
status, ignore selectors rationale, re-run instructions
Local verification:
- npm run a11y: 7/7 URLs passed (0 violations)
- vue-tsc: 0 errors
- ESLint: 0 errors
- Vitest: 88 files / 683 passed / 3 skipped / 0 failed (no regressions)
Plan: docs/superpowers/plans/2026-05-14-audit3-deferred-fixes.md Task 1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 08:25:14 +03:00
Дмитрий
cc6e1cba72
fix(configs): Windows-fix format:sql:check + lychee/pa11y/composer/ESLint hygiene + npm-outdated CI (audit P0-03 + 5 P1/O)
...
Закрытие аудита 2026-05-09 (b6ae8dd ):
- P0-03: format:sql:check заменён /tmp/ на db/.schema-formatted.tmp.sql (Windows-совместимо).
+ .gitignore: добавлен db/.schema-formatted.tmp.sql.
+ дополнительно: web/**/*.html убран из npm run links — статические концепты
web/v8/*.html используют root-relative ссылки на будущие маршруты Vue, lychee
не резолвит их без --root-dir; они уже в exclude_path. Lychee с 20 → 1 error
(оставшийся 1 — pre-existing битая ссылка в docs/superpowers/specs/, вне scope).
- P1-02: .lychee.toml exclude root-relative для web/v8/*.html — добавлен regex
паттерн для будущих маршрутов (login/register/legal/dashboard/deals/admin/...).
- P1-12: pa11y.config.json пути обновлены на liderra_v8_handoff/concepts/v8_*.html
(login/dashboard/deals).
- P1-07: composer audit-offline скрипт (composer audit --locked) для офлайн-режима.
- O-refactor-05: ESLint no-restricted-imports запрещает явный import из 'vuetify/components'.
- O-stack-08: .github/workflows/dependency-check.yml — еженедельный (Mon 09:00 UTC) npm outdated с авто-issue.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 18:31:17 +03:00
Дмитрий
f1ea6a15a6
fix(config): B-1 — конфигурационные находки аудита B (P0+P1)
...
- cspell-words.txt: удалено сломанное `ofеrtу` (кириллица в латыни,
пропущено мимо словаря; нормальные `оферта`/`оферты` уже есть).
- .gitignore: `.playwright-mcp/` → `**/.playwright-mcp/` (артефакт может
появиться в любом подкаталоге, не только в корне).
- pa11y.config.json: добавлен `web/03-deals.html` (готовый прототип №03,
ранее не попадал в a11y-check).
- lefthook.yml: pre-push +lychee-links — битые ссылки ловятся до push,
как и было задумано (Прил. Н §1, в комментарии было, в jobs не было).
- CLAUDE.md §4: `gitleaks detect` / `gitleaks protect` → `./bin/gitleaks.exe ...`
(на Windows бинарь в `bin/`, не в PATH).
- README.md: подпись `Прил. Л v0.1 от 05.05.2026` → `v0.4 от 06.05.2026`,
синхронизация с таблицей версий (последняя запись v0.4).
Линтеры (markdownlint, cspell на затронутых .md) — чисто.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-06 23:31:14 +07:00
Дмитрий
6ff05fd7ea
chore: phase 0 tooling baseline
...
Установлены 9 инструментов фазы 0 + lefthook для pre-commit/pre-push hooks.
Конфиги в корне:
- package.json + package-lock.json (10 dev-deps, 7 npm-скриптов)
- .markdownlint.json + .markdownlintignore — стиль Markdown
- cspell.json + cspell-words.txt — орфография ru/en + 350+ проектных терминов
- .lychee.toml — проверка ссылок с игнором плейсхолдеров
- .stylelintrc.json — стиль CSS в HTML-прототипах
- .gitleaks.toml — 8 кастомных правил для РФ-контекста (телефон, ИНН, ОГРН,
паспорт, Yandex Cloud-tokens, webhook secrets) + allowlist для масок
- pa11y.config.json — WCAG 2.1 AA для web/01-login.html и web/02-dashboard.html
- .mcp.json — 3 MCP-сервера (Playwright, GitHub через офиц. hosted endpoint,
PostgreSQL — заглушка)
- .gitignore — node_modules, bin/*, артефакты + задел на фазы 1–3
- .claude/settings.json — permissions allow/deny + хук авто-fix .md
- lefthook.yml — pre-commit (gitleaks + markdownlint + cspell + stylelint)
и pre-push (полный gitleaks по истории)
Связано: docs/Tooling_v8_3.md (Прил. Н v1.0) — реестр 28 инструментов в 4
фазах; CLAUDE.md в корне — оперативная карта приоритета правил и команд.
Архитектурных изменений в проекте: 0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-06 04:44:20 +07:00