Files
ss-tools/docs/adr/README.md
busya 02a97bfc9c fix(maintenance): survive sqlparse token cap on huge virtual dataset SQL
Discovery of virtual datasets now works, but a runtime blocker remained: any
virtual dataset whose SQL exceeds sqlparse's MAX_GROUPING_TOKENS (10000 tokens)
raised SQLParseError 'Maximum number of tokens exceeded (10000)' from
extract_tables_from_sql_span, which is called unguarded in the scan loop — one
oversized virtual dataset aborted the whole maintenance preview/start.

- extract_tables_from_sql_span now wraps sqlparse.parse + token walk in
  try/except and falls back to regex-only extraction (keeping all schema.table
  matches) instead of raising, so huge SQL no longer fails the scan.
- Tier-1 virtual filter uses value "" (not None) so the sql is_not_null filter
  passes Superset's rison schema instead of always falling back to a full scan.

Tests: huge-SQL fallback (extractor) and huge-virtual-dataset scan resilience
(scanner). ADR-0020 updated with Decision 3.
2026-08-03 23:48:01 +07:00

6.1 KiB
Raw Permalink Blame History

Реестр архитектурных решений

ADR фиксирует принятое и проверяемое архитектурное решение. Это не план работ и не каталог желаемой архитектуры: обещание, которое ещё не реализовано, должно иметь статус PROPOSED или быть вынесено в spec.

Статусы

Статус Значение
ACCEPTED Решение действует и соответствует реализации.
PARTIALLY IMPLEMENTED Направление принято, но в репозитории есть существенная незавершённая часть.
SUPERSEDED Решение заменено указанным ADR; исторический файл не меняет действующую архитектуру.
REJECTED Альтернатива запрещена; это не описание действующей реализации.
PROPOSED Решение обсуждается и не должно считаться обязательным.

Актуальный реестр

ADR Статус Проверенное содержание
0001 PARTIALLY IMPLEMENTED Базовое разделение backend/frontend/docs/specs сохранено; точная схема файла устарела.
0002 ACCEPTED Семантические skills и контракты в исходном коде остаются правилом репозитория.
0003 ACCEPTED Сервис остаётся внешним оркестратором Superset.
0004 SUPERSEDED Заменён ADR-0016: исходный subprocess/TOML-контракт не был реализован.
0005 ACCEPTED Локальная аутентификация, RBAC и ADFS JIT provisioning реализованы.
0006 ACCEPTED Svelte 5, Screen Models и UI atoms применяются в frontend.
0007 REJECTED Комбинация fromStore с несколькими $derived запрещена.
0008 ACCEPTED Декораторный registry реализован в backend/src/api/routes/assistant/_tool_registry.py.
0009 ACCEPTED Управление корпоративными CA реализовано в Docker и HTTP-клиентах.
0010 ACCEPTED Порог декомпозиции Screen Model остаётся архитектурным ограничением.
0011 PARTIALLY IMPLEMENTED Async Task Manager, EventBus и bounded executors внедрены; утверждение о полном отказе от sync-кода не подтверждено.
0012 ACCEPTED Интеграционные Superset-тесты используют Postgres, init/web контейнеры и superset_config.py.
0013 ACCEPTED scripts/coverage-summary.sh существует и собирает сводный отчёт.
0014 SUPERSEDED Заменён ADR-0015.
0015 ACCEPTED Agent и shared utilities выделены в отдельные installable packages.
0016 ACCEPTED Плагины загружаются в процессе из backend/src/plugins через PluginBase.
0017 ACCEPTED Agent-centric traces achieved by editing call sites (meaningful intents, removal of per-request noise) rather than only adding complexity to the logger.
0018 REJECTED Dataset Review is removed from the active product; specs/027-dataset-llm-orchestration/ is retained only as archived history.
0019 ACCEPTED UUID-трансформация БД (не strip_databases), cross-filter patching через IdMappingService, password injection flow (await_input→wait_for_input→retry), разделение dry-run/execute, парсинг имён YAML-файлов БД.
0020 ACCEPTED Обнаружение виртуальных (SQL) датасетов в maintenance discovery через серверный фильтр sql is_not_null (fallback — клиентский скан по непустому sql); AsyncAPIClient.request поднимает не-2xx ответы (raise_for_status); sqlparse token-limit (10000) fallback к regex-only для гигантских виртуальных датасетов.

Правила сопровождения

  1. Новый ADR добавляется только для решения, которое меняет границу модулей, runtime/topology, безопасность, данные или постоянный способ разработки.
  2. Каждый ADR содержит контекст, решение, последствия и отклонённые альтернативы.
  3. При изменении решения создаётся новый ADR со ссылкой на заменённый, а прежний получает SUPERSEDED; историю не переписывают.
  4. В ADR указываются существующие пути и проверяемые факты. Версии, пороги и команды обновляются вместе с кодом либо заменяются ссылкой на источник истины.