4c601fbe06172be28f3312e63c239383ee742655
{
"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."
}
]
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_URLDATABASE_URLTASKS_DATABASE_URLAUTH_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.mddocs/settings.mdsemantic_protocol.md
Description
Languages
JavaScript
53.8%
Python
31.3%
Svelte
8.4%
Shell
6.3%
TypeScript
0.1%