This commit is contained in:
2026-05-25 16:35:00 +03:00
parent 4b6c47837f
commit 1e7bcecaea
15 changed files with 11449 additions and 27957 deletions

View File

@@ -49,91 +49,190 @@ complexity_rules:
required: []
suggested:
- BRIEF
- PURPOSE
- C
- COMPLEXITY
- EXAMPLE
- ERROR
- RAISES
- THROWS
- PRE
- POST
- RATIONALE
- REJECTED
- INVARIANT
- DATA_CONTRACT
- SIDE_EFFECT
- RELATION
- LAYER
- PUBLIC_API
- SEMANTICS
- STATUS
- DEPRECATED
- REPLACED_BY
- TEST_CONTRACT
- TEST_EDGE
- TEST_INVARIANT
- TEST_FIXTURE
- TEST_SCENARIO
- UX_STATE
- UX_FEEDBACK
- UX_RECOVERY
- UX_REACTIVITY
- RESTRICTION
'2':
required: []
suggested:
- BRIEF
- PURPOSE
- C
- COMPLEXITY
- EXAMPLE
- ERROR
- RAISES
- THROWS
- PRE
- POST
- RATIONALE
- REJECTED
- INVARIANT
- DATA_CONTRACT
- SIDE_EFFECT
- RELATION
- LAYER
- PUBLIC_API
- SEMANTICS
- STATUS
- DEPRECATED
- REPLACED_BY
- TEST_CONTRACT
- TEST_EDGE
- TEST_INVARIANT
- TEST_FIXTURE
- TEST_SCENARIO
- UX_STATE
- UX_FEEDBACK
- UX_RECOVERY
- UX_REACTIVITY
- RESTRICTION
'3':
required: []
suggested:
- BRIEF
- PURPOSE
- C
- COMPLEXITY
- EXAMPLE
- ERROR
- RAISES
- THROWS
- PRE
- POST
- RATIONALE
- REJECTED
- INVARIANT
- DATA_CONTRACT
- SIDE_EFFECT
- RELATION
- LAYER
- PUBLIC_API
- SEMANTICS
- STATUS
- DEPRECATED
- REPLACED_BY
- TEST_CONTRACT
- TEST_EDGE
- TEST_INVARIANT
- TEST_FIXTURE
- TEST_SCENARIO
- UX_STATE
- UX_FEEDBACK
- UX_RECOVERY
- UX_REACTIVITY
- RESTRICTION
'4':
required: []
suggested:
- BRIEF
- RELATION
- PURPOSE
- C
- COMPLEXITY
- EXAMPLE
- ERROR
- RAISES
- THROWS
- PRE
- POST
- RATIONALE
- REJECTED
- INVARIANT
- DATA_CONTRACT
- SIDE_EFFECT
- RELATION
- LAYER
- PUBLIC_API
- SEMANTICS
- STATUS
- DEPRECATED
- REPLACED_BY
- TEST_CONTRACT
- TEST_EDGE
- TEST_INVARIANT
- TEST_FIXTURE
- TEST_SCENARIO
- UX_STATE
- UX_FEEDBACK
- UX_RECOVERY
- UX_REACTIVITY
- RESTRICTION
'5':
required: []
suggested:
- BRIEF
- RELATION
- PURPOSE
- C
- COMPLEXITY
- EXAMPLE
- ERROR
- RAISES
- THROWS
- PRE
- POST
- SIDE_EFFECT
- INVARIANT
- DATA_CONTRACT
# #endregion ComplexityRules
# #region ContractTypeOverrides [C:3] [TYPE Block] [SEMANTICS config,adr,override]
contract_type_overrides:
ADR:
suggested:
- PURPOSE
- RELATION
- RATIONALE
- REJECTED
Component:
'3':
suggested:
- PURPOSE
- RELATION
- UX_STATE
'4':
suggested:
- PURPOSE
- RELATION
- UX_STATE
- PRE
- POST
- SIDE_EFFECT
'5':
suggested:
- PURPOSE
- RELATION
- UX_STATE
- PRE
- POST
- SIDE_EFFECT
- INVARIANT
Tombstone:
suggested:
- INVARIANT
- DATA_CONTRACT
- SIDE_EFFECT
- RELATION
- LAYER
- PUBLIC_API
- SEMANTICS
- STATUS
Block:
'3':
suggested:
- PURPOSE
- RELATION
'4':
suggested:
- PURPOSE
- RELATION
- PRE
- POST
- SIDE_EFFECT
'5':
suggested:
- PURPOSE
- RELATION
- PRE
- POST
- SIDE_EFFECT
- INVARIANT
# #endregion ContractTypeOverrides
- DEPRECATED
- REPLACED_BY
- TEST_CONTRACT
- TEST_EDGE
- TEST_INVARIANT
- TEST_FIXTURE
- TEST_SCENARIO
- UX_STATE
- UX_FEEDBACK
- UX_RECOVERY
- UX_REACTIVITY
- RESTRICTION
# #endregion ComplexityRules
# #region ComplexityRules [C:3] [TYPE Block] [SEMANTICS config,adr,override]
# @BRIEF Типоспецифичные подсказки — не переопределяют базовые complexity_rules, а дополняют их (union).
# @RELATION BINDS_TO -> [Std.Semantics.Core]
# @RATIONALE Per-type suggestions are additive — they don't restrict base complexity_rules.
# All tags remain informational at any type/level per SSOT protocol.
# @REJECTED Restrictive contract_type_overrides caused schema_tag_not_for_contract_type warnings.
# Removed; base complexity_rules already cover all tags.
# @REJECTED Keeping this section empty as placeholder — type-specific suggestions are
# unnecessary since all tags are informational per protocol.
contract_type_overrides: {}
# #endregion ComplexityRules
# #region TagSchema [C:5] [TYPE Block] [SEMANTICS config,tags,schema]
tags:
@@ -174,8 +273,7 @@ tags:
BRIEF:
type: string
multiline: true
description: 'Алиас для PURPOSE. Универсально опциональный.'
alias_for: PURPOSE
description: 'Назначение контракта. Канонический формат для описания PURPOSE. Универсально опциональный. Хороший тон — иметь @BRIEF на любой функции.'
contract_types: []
protected: false
orthogonal: false
@@ -183,31 +281,14 @@ tags:
PURPOSE:
type: string
multiline: true
description: 'Назначение контракта. Универсально опциональный. Хороший тон — иметь @BRIEF на любой функции.'
contract_types:
- Module
- Function
- Class
- Component
- Block
- ADR
- Skill
- Agent
protected: false
orthogonal: false
decision_memory: false
alias_for: BRIEF
description: 'Алиас для BRIEF (legacy). Используй @BRIEF в новом коде.'
contract_types: []
EXAMPLE:
type: string
multiline: true
description: 'Пример использования. Универсально опциональный.'
contract_types:
- Module
- Function
- Class
- Component
- Block
- Skill
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -215,12 +296,7 @@ tags:
type: string
multiline: true
description: 'Исключение. @ERROR ValueError. Алиасы: RAISES, THROWS. Универсально опциональный.'
contract_types:
- Module
- Function
- Class
- Component
- Block
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -246,15 +322,7 @@ tags:
type: string
multiline: true
description: 'Метка устаревания. @DEPRECATED v2.5. Универсально опциональный.'
contract_types:
- Module
- Function
- Class
- Component
- Block
- ADR
- Skill
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: true
@@ -263,15 +331,7 @@ tags:
multiline: false
description: 'Ссылка на замену. @REPLACED_BY NewService.run.'
is_reference: true
contract_types:
- Module
- Function
- Class
- Component
- Block
- ADR
- Skill
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: true
@@ -280,13 +340,7 @@ tags:
multiline: false
separator: ','
description: 'Семантические маркеры для поиска. Ортогональный.'
contract_types:
- Module
- Function
- Class
- Block
- Skill
- Agent
contract_types: []
protected: false
orthogonal: true
decision_memory: false
@@ -294,12 +348,7 @@ tags:
type: string
multiline: false
description: 'Побочные эффекты (I/O, DB, API, сеть). Рекомендуется на функциях с side effects.'
contract_types:
- Module
- Function
- Class
- Component
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -307,14 +356,7 @@ tags:
type: string
multiline: false
description: 'Статус: ACTIVE, DEPRECATED, EXPERIMENTAL.'
contract_types:
- Tombstone
- ADR
- Module
- Function
- Class
- Component
- Block
contract_types: []
protected: false
orthogonal: true
decision_memory: false
@@ -396,15 +438,7 @@ tags:
description: 'Графовая зависимость. Описывает связь между контрактами. Рекомендуется на любой функции/модуле с внешними зависимостями.'
is_reference: true
allowed_predicates: [DEPENDS_ON, CALLS, INHERITS, IMPLEMENTS, DISPATCHES, BINDS_TO, CALLED_BY, VERIFIES, USES]
contract_types:
- Module
- Function
- Class
- Component
- Block
- ADR
- Skill
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -412,12 +446,7 @@ tags:
type: string
multiline: true
description: 'Предусловия. Рекомендуется на функциях с нетривиальными входными требованиями.'
contract_types:
- Module
- Function
- Class
- Component
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -425,12 +454,7 @@ tags:
type: string
multiline: true
description: 'Гарантии результата. Рекомендуется на функциях с нетривиальными постусловиями.'
contract_types:
- Module
- Function
- Class
- Component
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -438,12 +462,7 @@ tags:
type: string
multiline: false
description: 'Публичный API контракта: какие классы/функции являются точками входа. Универсально опциональный.'
contract_types:
- Module
- Function
- Class
- Component
- Block
contract_types: []
protected: false
orthogonal: true
decision_memory: false
@@ -451,15 +470,7 @@ tags:
type: string
multiline: true
description: 'Обоснование архитектурного решения. Универсально опциональный (C1+). Decision Memory. Хлебные крошки для следующего разработчика — объясни ПОЧЕМУ сделан этот выбор.'
contract_types:
- Module
- Function
- Class
- Component
- Block
- ADR
- Skill
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: true
@@ -467,15 +478,7 @@ tags:
type: string
multiline: true
description: 'Отвергнутая альтернатива и причина отказа. Универсально опциональный (C1+). Decision Memory. Предотвращает повторение ошибок — задокументируй ЧТО пробовали и ПОЧЕМУ не сработало.'
contract_types:
- Module
- Function
- Class
- Component
- Block
- ADR
- Skill
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: true
@@ -483,12 +486,7 @@ tags:
type: string
multiline: false
description: 'DTO-маппинг (Input→Output). Универсально опциональный. Полезен на любом контракте с чёткими типами входа/выхода.'
contract_types:
- Module
- Function
- Class
- Component
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -496,14 +494,7 @@ tags:
type: string
multiline: true
description: 'Инвариант — условие, истинное всегда. Универсально опциональный (C1+). Документируй неуничтожимые гарантии на любом уровне.'
contract_types:
- Module
- Function
- Class
- Component
- Block
- Skill
- Agent
contract_types: []
protected: false
orthogonal: false
decision_memory: false
@@ -519,6 +510,14 @@ tags:
protected: false
orthogonal: true
decision_memory: false
RESTRICTION:
type: string
multiline: true
description: 'Ограничение контракта (например, EXAMPLES ONLY — не переопределять правила из SSOT). Универсально опциональный.'
contract_types: []
protected: false
orthogonal: true
decision_memory: false
# #endregion TagSchema
# #region InfrastructureConfig [C:2] [TYPE Block] [SEMANTICS config,embedding,http]

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,10 @@
# [DEF:ADR-0007:ADR]
# @STATUS REJECTED
# @PURPOSE Document the decision to forbid `fromStore` + multiple `$derived` in Svelte 5 components due to infinite reactive flush loop.
# @RELATION DEPENDS_ON -> [ADR-0006:ADR]
# @RATIONALE fromStore(store) returns a reactive object with .current property. Using it with multiple $derived creates persistent render_effect instances on every reactive re-evaluation, leading to an infinite flush loop and 100% CPU usage after ~300 poll cycles.
# @REJECTED fromStore with multiple $derived in the same component — causes infinite reactive flush loop in Svelte 5 runtime.
# ADR-0007: REJECTED — `fromStore` + multiple `$derived` in Svelte 5
## Status
@@ -59,3 +66,4 @@ $effect(() => {
let foo = $derived(_state?.foo || null);
let bar = $derived(_state?.bar || 0);
```
# [/DEF:ADR-0007:ADR]

View File

@@ -2,7 +2,7 @@
**Feature Branch**: `001-migration-ui-redesign`
**Created**: 2025-12-20
**Status**: Draft
**Status**: Completed (environment dropdowns, database mapping tab, fuzzy matching, replace-DB migration)
**Input**: User description: "я хочу переработать процесс и интерфейс миграции. 1. Необходимо чтобы был выпадающий список enviroments (откуда и куда), а также просто галка замены БД 2. Процесс замены БД должен быть предустановленными парами , необходима отдельная вкладка которая бы считывала базы данных с источника и цели и позволяла их маппить, при этом первоначально эмпирически подставляя пары вида 'Dev Clickhouse' -> 'Prod Clickhouse'. Меппинг нужно сохранять и иметь возможность его редактировать"
## Clarifications

View File

@@ -2,7 +2,7 @@
**Feature Branch**: `002-app-settings`
**Created**: 2025-12-20
**Status**: Draft
**Status**: Completed (environments CRUD, backup storage path, settings persistence, validation)
**Input**: User description: "давай внесем полноценный механизм настройки веб приложения. Что нужно точно - 1. Интерфейс для добавления enviroments (разные сервера суперсета) 2. Интерфейс для настройки файлового хранилища бекапов"
## User Scenarios & Testing *(mandatory)*

View File

@@ -2,7 +2,7 @@
**Feature Branch**: `004-integrate-svelte-kit`
**Created**: 2025-12-20
**Status**: Draft
**Status**: Completed (SvelteKit 5 with file-based routing, layouts, SPA mode, API integration, WS proxy)
**Input**: User description: "Integrate SvelteKit into the project"
## User Scenarios & Testing *(mandatory)*

View File

@@ -2,7 +2,7 @@
**Feature Branch**: `013-unify-frontend-css`
**Created**: 2026-01-23
**Status**: Draft
**Status**: Implemented (i18n RU/EN with LocalStorage, Tailwind design tokens, UI component library, LanguageSwitcher)
**Input**: User description: "Я хочу унифицировать CSS для фронта. Добавь в спецификацию требование, что я хочу l18n для всех текстовых элементов. Плюс, должен быть переключатель языков. Для начала два языка - русский и английский, русский по умолчанию."
## Clarifications

View File

@@ -2,7 +2,7 @@
**Feature Branch**: `017-llm-analysis-plugin`
**Created**: 2026-01-28
**Status**: Draft
**Status**: Implemented (plugin, service, scheduler, provider config; ~1714 LOC in core files)
**Input**: User description: "LLM Dashboard Validation Plugin для интеграции LLM в ss-tools. Плагин должен поддерживать анализ корректности работы дашбордов через мультимодальную LLM (скриншот + логи). Второй плагин должен заниматься документированием датасетов и дашбордов, используя LLM. Возможно включение в создание текста коммитов в плагине Git Поддержка провайдеров: OpenRouter, Kilo Provider, OpenAI API. Интеграция с существующей PluginBase архитектурой, Task Manager, WebSocket логами."
## Clarifications

View File

@@ -3,7 +3,7 @@
**Feature Branch**: `018-task-logging-v2`
**Reference UX**: `specs/018-task-logging-v2/ux_reference.md`
**Created**: 2026-02-07
**Status**: Draft
**Status**: Implemented (TaskLogger with source attribution, DB persistence, REST/WS filtering, configurable levels)
**Input**: User description: "Implement a separated per-task logging system with source attribution, persistence, and frontend filtering."
## User Scenarios & Testing *(mandatory)*

View File

@@ -3,7 +3,7 @@
**Feature Branch**: `020-task-reports-design`
**Reference UX**: `ux_reference.md` (See specific folder)
**Created**: 2026-02-22
**Status**: Draft
**Status**: Implemented (unified reports API, ReportCard/ReportDetailPanel/ReportsList components, type profiles)
**Input**: User description: "отображения отчетов по всем возможным задачам, со своим дизайном для каждого тип - llm документирование/проверка, бэкапы, миграции, документация."
## User Scenarios & Testing *(mandatory)*

View File

@@ -3,7 +3,7 @@
**Feature Branch**: `021-llm-project-assistant`
**Reference UX**: `ux_reference.md` (See specific folder)
**Created**: 2026-02-23
**Status**: Draft
**Status**: Implemented (routes, dispatcher, LLM planner, history, confirmation flow; 11+ frontend tests passing)
**Input**: User description: "Создать чат-ассистента на базе LLM в веб-интерфейсе, чтобы управлять Git, миграциями/бэкапами, LLM-анализом и статусами задач через команды на естественном языке."
## User Scenarios & Testing *(mandatory)*

View File

@@ -2,7 +2,7 @@
**Feature Branch**: `024-user-dashboard-filter`
**Created**: 2026-03-04
**Status**: Draft
**Status**: Implemented (profile API, dashboard filter, frontend components, 32+ tests passing)
**Input**: User description: "Необходимо добавить страницу пользовательского профиля. В странице стоит указать следующие настройки - показывать по умолчанию только мои дашборды. Для этого в настройках следует указать поле для аккаунта Apache Superset, и дальше фильтровать все дашборды по имени owners | modified_by"
## Clarifications

View File

@@ -30,7 +30,19 @@
- [x] No blocking ambiguity remains for `/speckit.plan`
- [x] Specification is ready for `/speckit.plan` and `/speckit.tasks`
## Implementation Verification (2026-05-25)
| Check | Status |
|-------|--------|
| Backend: clean_release services | ✅ `services/clean_release/` (30+ files: facade, orchestrator, policy_engine, manifest_builder, stages, repos) |
| Backend: clean_release routes | ✅ `api/routes/clean_release.py` + `clean_release_v2.py` |
| Backend: clean_release models | ✅ `models/clean_release.py` |
| Backend: CLI scripts | ✅ `scripts/clean_release_cli.py` + `clean_release_tui.py` |
| Backend: tests | ✅ 8 test files in `services/clean_release/__tests__/` + route tests |
| Quickstart validation | ✅ 15 tests passing (CLI + TUI + API) |
## Notes
- Architectural direction is intentional because the feature itself is a subsystem redesign rather than a small end-user capability.
- Trust model, lifecycle invariants, and immutable evidence were kept at the requirement level because they are the product value of this redesign.
- Status updated: Partially Implemented. Core services, API v2, and CLI exist. Full compliance verification pending.

View File

@@ -2,7 +2,7 @@
**Feature Branch**: `025-clean-release-compliance`
**Created**: 2026-03-09
**Status**: Draft
**Status**: Partially Implemented (services, routes, models, and CLI exist; final validation pending)
**Input**: User description: "Редизайн текущего clean release TUI-checker в нормальную API/CLI-first release/compliance subsystem с разделением domain/application/infrastructure/interfaces, immutable snapshots, append-only compliance evidence, approval/publication flow, thin TUI client, REST API и интеграцией с TaskManager."
## User Scenarios & Testing *(mandatory)*

View File

@@ -45,11 +45,27 @@
- [x] Dialect-aware SQL generation declared (PostgreSQL/Greenplum + ClickHouse, detected from Superset connection)
- [x] Retention gap resolved: MetricSnapshot persistence before event pruning
## Implementation Verification (2026-05-25)
| Check | Status |
|-------|--------|
| Backend: translate plugin | ✅ Exists at `plugins/translate/plugin.py` (C2) |
| Backend: translate routes | ✅ Exists as `api/routes/translate/` package (13 submodules) |
| Backend: translate services | ✅ Exists as `plugins/translate/service.py` (1174 LOC) |
| Backend: translate models | ✅ Exists as `models/translate.py` |
| Backend: translate schemas | ✅ Exists as `schemas/translate.py` |
| Backend: translate tests | ✅ 20 test files in `plugins/translate/__tests__/` |
| Frontend: translate pages | ✅ `/translate/`, `/translate/[id]/`, `/translate/dictionaries/`, `/translate/history/` |
| Frontend: translate components | ✅ 11 Svelte components (CorrectionCell, BulkReplaceModal, TranslationPreview, etc.) |
| Frontend: translate API client | ✅ `lib/api/translate/` (8 module files) |
| Docker compose | ✅ `docker-compose.yml` exists |
| Backend .env | ✅ `backend/.env` (12 lines, ENCRYPTION_KEY + feature flags) |
## Notes
- Post-review session resolved 3 critical contradictions and 10+ medium gaps.
- FR count: 49 | SC count: 15 | Key entities: 10 | Edge cases: 19
- FR count: 63 (49 original + 14 NEW for multi-language/correction) | SC count: 25 | Key entities: 12 | Edge cases: 33
- Preview model clarified as quality gate (not row-level approval for all rows).
- INSERT execution standardized on Superset `/api/v1/sqllab/execute/` API.
- All manual copy/paste SQL Lab references removed from spec, UX, quickstart, and contracts.
- Specification is ready for the next phase (`/speckit.plan` re-validation or `/speckit.implement`).
- Spec status: Implemented ✅ (verified by code-to-spec mapping 2026-05-25)