Commit Graph

7 Commits

Author SHA1 Message Date
Marker689
dea9e0a6e4 a11y: Web Interface Guidelines — 19 правок доступности и семантики
- base.html: lang динамический, meta theme-color, skip-link, убран дубль Dashboard
- Фильтры: labels на search/select, type=search, placeholder с …, autocomplete=off
- llm-retry: <span> → <button> во всех шаблонах (_llm_report, scan, package)
- sortable th: tabindex=0, role=button через JS + keyboard handler
- sort-icon: aria-hidden=true
- style.css: color-scheme:dark, prefers-reduced-motion, tabular-nums, touch-action
- app.js: clipboard fallback для не-HTTPS
2026-05-10 11:45:41 +03:00
Marker689
32dc179f25 refactor: удалены внешние зависимости — pico.css и htmx.js теперь локально
Скачаны и сохранены в /static:
- pico.min.css v2 (83 KB)
- htmx.min.js v2.0.4 (51 KB)
Добавлены в .gitignore
2026-05-10 11:35:36 +03:00
Marker689
d33411b719 feat: фаза 3 — i18n RU/EN, /metrics, AI disclaimer, initiator+IP, LLM очередь
3.3 i18n: модуль с RU/EN словарями, LangMiddleware (cookie+query),
     Jinja-фильтр t(), переключатель EN/RU в nav, перевод ключевых
     строк интерфейса
3.5 /metrics: Prometheus-совместимый endpoint (scans_total,
     scans_flagged, findings_total, by_status, by_ecosystem,
     last_scan_timestamp)
3.2 AI disclaimer: сноска под каждым LLM-вердиктом (.llm-disclaimer)
3.4 LLM очередь: asyncio.Semaphore(LLM_MAX_CONCURRENT_ANALYSES)
3.1 initiator + source_ip: поля в Scan, захват из webhook payload,
     показ в scan_detail + API
3.6 UI: убран stat-minibar и heatmap с дашборда
2026-05-10 07:37:22 +03:00
Marker689
c43e7c4c9b fix: критические баги и качество кода — полный аудит
Критические фиксы:
- main.py: монтировать /static из web/static/ (CSS не грузился совсем)
- api/scans.py: filtered total count (был всегда общий, игнорируя фильтры)
- web/routes.py: исправлен VALID_SORT_FIELDS (отсутствовали ключи packages)
- web/routes.py: filtered total count для web scans list
- package_detail.html: f.data.X вместо f.X (findings не отображались)

Чистка мёртвого кода:
- config.py: удалён _parse_repos и nexus_repositories (не использовались)
- web/routes.py: удалён completed_scans/failed_scans (не отображались)
- удалён мёртвый guarddog_nexus/static/style.css (67-байтный стаб)

Качество кода:
- web/routes.py: Jinja2 Environment кэшируется на уровне модуля
- Вынесен дублирующийся JS в web/static/app.js
- Вынесены дублирующиеся inline-стили в CSS-классы
- Исправлен duplicate class attribute в списках
- Удалены гигантские SVG из empty states

Тесты:
- 20 новых edge-case тестов (CSV export, search/filter/sort, 404, pagination)
- Добавлен sample_flagged_scan fixture
- Итого: 50 тестов, все зелёные
2026-05-10 03:46:05 +03:00
Marker689
d5df1d75b8 ui: улучшить карточки findings — сворачивание, копирование кода, breadcrumbs
- Добавить collapsible details/summary для findings
- Добавить кнопку Copy с feedback 'Copied!'
- Добавить toggle All (Expand/Collapse)
- Добавить breadcrumbs на detail-страницах
- Добавить spinner для scanning статуса на detail-страницах
- Добавить empty state для findings
- Добавить scripts block в base.html
2026-05-10 03:13:54 +03:00
Marker689
18d33cdfd7 ui: вынести CSS в отдельный файл, добавить sticky nav и title block
- Создать guarddog_nexus/web/static/style.css со всеми стилями
- Убрать inline <style> из base.html
- Добавить sticky header для навигации
- Добавить title block для кастомных заголовков страниц
- Добавить базовые анимации (pulse, spin, hover effects)
2026-05-10 03:05:55 +03:00
Marker689
4ce99d3c85 feat: guarddog-nexus — webhook-based PyPI scanner with web UI 2026-05-09 04:48:10 +03:00