busya 4c601fbe06 [
{
    "file": "backend/src/api/routes/__tests__/test_dashboards.py",
    "verdict": "APPROVED",
    "rejection_reason": "NONE",
    "audit_details": {
      "target_invoked": true,
      "pre_conditions_tested": true,
      "post_conditions_tested": true,
      "test_data_used": true
    },
    "feedback": "All 9 previous findings remediated. @TEST_FIXTURE data aligned, all @TEST_EDGE scenarios covered, all @PRE negative tests present, all @SIDE_EFFECT assertions added. Full contract compliance."
  },
  {
    "file": "backend/src/api/routes/__tests__/test_datasets.py",
    "verdict": "APPROVED",
    "rejection_reason": "NONE",
    "audit_details": {
      "target_invoked": true,
      "pre_conditions_tested": true,
      "post_conditions_tested": true,
      "test_data_used": true
    },
    "feedback": "All 6 previous findings remediated. Full @PRE boundary coverage including page_size>100, empty IDs, missing env. @SIDE_EFFECT assertions added. 503 error path tested."
  },
  {
    "file": "backend/src/core/auth/__tests__/test_auth.py",
    "verdict": "APPROVED",
    "rejection_reason": "NONE",
    "audit_details": {
      "target_invoked": true,
      "pre_conditions_tested": true,
      "post_conditions_tested": true,
      "test_data_used": true
    },
    "feedback": "All 4 previous findings remediated. @SIDE_EFFECT last_login verified. Inactive user @PRE negative test added. Empty hash edge case covered. provision_adfs_user tested for both new and existing user paths."
  },
  {
    "file": "backend/src/services/__tests__/test_resource_service.py",
    "verdict": "APPROVED",
    "rejection_reason": "NONE",
    "audit_details": {
      "target_invoked": true,
      "pre_conditions_tested": true,
      "post_conditions_tested": true,
      "test_data_used": true
    },
    "feedback": "Both prior recommendations implemented. Full edge case coverage for _get_last_task_for_resource. No anti-patterns detected."
  },
  {
    "file": "backend/tests/test_resource_hubs.py",
    "verdict": "APPROVED",
    "rejection_reason": "NONE",
    "audit_details": {
      "target_invoked": true,
      "pre_conditions_tested": true,
      "post_conditions_tested": true,
      "test_data_used": true
    },
    "feedback": "Pagination boundary tests added. All @TEST_EDGE scenarios now covered. No anti-patterns detected."
  },
  {
    "file": "frontend/src/lib/components/assistant/__tests__/assistant_chat.integration.test.js",
    "verdict": "APPROVED",
    "rejection_reason": "NONE",
    "audit_details": {
      "target_invoked": true,
      "pre_conditions_tested": true,
      "post_conditions_tested": true,
      "test_data_used": true
    },
    "feedback": "No changes since previous audit. Contract scanning remains sound."
  },
  {
    "file": "frontend/src/lib/components/assistant/__tests__/assistant_confirmation.integration.test.js",
    "verdict": "APPROVED",
    "rejection_reason": "NONE",
    "audit_details": {
      "target_invoked": true,
      "pre_conditions_tested": true,
      "post_conditions_tested": true,
      "test_data_used": true
    },
    "feedback": "No changes since previous audit. Confirmation flow testing remains sound."
  }
]
2026-02-27 09:59:57 +03:00
[
2026-02-27 09:59:57 +03:00
2026-02-26 19:29:07 +03:00
2026-02-26 19:40:00 +03:00
2026-02-26 19:29:07 +03:00
2026-02-25 21:19:48 +03:00
[
2026-02-27 09:59:57 +03:00
2026-02-23 10:18:56 +03:00
[
2026-02-27 09:59:57 +03:00
2026-02-25 20:27:29 +03:00
2026-02-23 13:15:48 +03:00
2026-02-19 17:43:45 +03:00
2026-02-23 13:15:48 +03:00
2026-02-26 17:54:23 +03:00
2026-02-24 21:08:12 +03:00
2026-02-24 21:08:12 +03:00
2025-12-27 10:16:41 +03:00
2026-02-24 21:08:12 +03:00
2026-02-24 21:08:12 +03:00
2026-02-24 21:08:12 +03:00
2026-02-24 21:08:12 +03:00
2026-02-24 21:08:12 +03:00
2026-02-24 21:08:12 +03:00
2026-02-24 21:08:12 +03:00
2026-02-20 20:47:39 +03:00

ss-tools

Инструменты автоматизации для Apache Superset: миграция, маппинг, хранение артефактов, Git-интеграция, отчеты по задачам и LLM-assistant.

Возможности

  • Миграция дашбордов и датасетов между окружениями.
  • Ручной и полуавтоматический маппинг ресурсов.
  • Логи фоновых задач и отчеты о выполнении.
  • Локальное хранилище файлов и бэкапов.
  • Git-операции по Superset-ассетам через UI.
  • Модуль LLM-анализа и assistant API.
  • Многопользовательская авторизация (RBAC).

Стек

  • Backend: Python, FastAPI, SQLAlchemy, APScheduler.
  • Frontend: SvelteKit, Vite, Tailwind CSS.
  • База данных: PostgreSQL (основная конфигурация), поддержка миграции с legacy SQLite.

Структура репозитория

  • backend/ — API, плагины, сервисы, скрипты миграции и тесты.
  • frontend/ — SPA-интерфейс (SvelteKit).
  • docs/ — документация по архитектуре и плагинам.
  • specs/ — спецификации и планы реализации.
  • docker/ и docker-compose.yml — контейнеризация.

Быстрый старт (локально)

Требования

  • Python 3.9+
  • Node.js 18+
  • npm

Запуск backend + frontend одним скриптом

./run.sh

Что делает run.sh:

  • проверяет версии Python/npm;
  • создает backend/.venv (если нет);
  • устанавливает backend/requirements.txt и frontend зависимости;
  • запускает backend и frontend параллельно.

Опции:

  • ./run.sh --skip-install — пропустить установку зависимостей.
  • ./run.sh --help — показать справку.

Переменные окружения для локального запуска:

  • BACKEND_PORT (по умолчанию 8000)
  • FRONTEND_PORT (по умолчанию 5173)
  • POSTGRES_URL
  • DATABASE_URL
  • TASKS_DATABASE_URL
  • AUTH_DATABASE_URL

Docker

Запуск

docker compose up --build

После старта сервисы доступны по адресам:

  • Frontend: http://localhost:8000
  • Backend API: http://localhost:8001
  • PostgreSQL: localhost:5432 (postgres/postgres, БД ss_tools)

Остановка

docker compose down

Очистка БД-тома

docker compose down -v

Альтернативный образ PostgreSQL

Если есть проблемы с pull postgres:16-alpine:

POSTGRES_IMAGE=mirror.gcr.io/library/postgres:16-alpine docker compose up -d db

или

POSTGRES_IMAGE=bitnami/postgresql:latest docker compose up -d db

Если порт 5432 занят:

POSTGRES_HOST_PORT=5433 docker compose up -d db

Разработка

Ручной запуск сервисов

cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 -m uvicorn src.app:app --reload --port 8000

В другом терминале:

cd frontend
npm install
npm run dev -- --port 5173

Тесты

Backend:

cd backend
source .venv/bin/activate
pytest

Frontend:

cd frontend
npm run test

Инициализация auth (опционально)

cd backend
source .venv/bin/activate
python src/scripts/init_auth_db.py
python src/scripts/create_admin.py --username admin --password admin

Миграция legacy-данных (опционально)

cd backend
source .venv/bin/activate
PYTHONPATH=. python src/scripts/migrate_sqlite_to_postgres.py --sqlite-path tasks.db

Дополнительная документация

  • docs/plugin_dev.md
  • docs/settings.md
  • semantic_protocol.md
Description
No description provided
Readme 15 MiB
Languages
JavaScript 53.8%
Python 31.3%
Svelte 8.4%
Shell 6.3%
TypeScript 0.1%