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.
6.1 KiB
6.1 KiB
Реестр архитектурных решений
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 для гигантских виртуальных датасетов. |
Правила сопровождения
- Новый ADR добавляется только для решения, которое меняет границу модулей, runtime/topology, безопасность, данные или постоянный способ разработки.
- Каждый ADR содержит контекст, решение, последствия и отклонённые альтернативы.
- При изменении решения создаётся новый ADR со ссылкой на заменённый, а прежний
получает
SUPERSEDED; историю не переписывают. - В ADR указываются существующие пути и проверяемые факты. Версии, пороги и команды обновляются вместе с кодом либо заменяются ссылкой на источник истины.