agents
This commit is contained in:
@@ -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
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)*
|
||||
|
||||
@@ -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)*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)*
|
||||
|
||||
@@ -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)*
|
||||
|
||||
@@ -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)*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)*
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user