Item Edit screen
This commit is contained in:
@@ -1,52 +0,0 @@
|
||||
<!-- tasks/20250813_093000_clarify_logging_spec.xml -->
|
||||
<TASK status="pending">
|
||||
<WORK_ORDER id="task-20250813093000-002-spec-update">
|
||||
<ACTION>MODIFY_SPECIFICATION</ACTION>
|
||||
|
||||
<TARGET_FILE>PROJECT_SPECIFICATION.xml</TARGET_FILE>
|
||||
|
||||
<GOAL>
|
||||
Уточнить техническое решение по логированию (id="tech_logging"), добавив конкретный пример использования Timber.
|
||||
Это устранит неоднозначность и предотвратит генерацию некорректного кода для логирования в будущем, предоставив ясный и копируемый образец.
|
||||
</GOAL>
|
||||
|
||||
<CONTEXT_FILES>
|
||||
<FILE>PROJECT_SPECIFICATION.xml</FILE>
|
||||
</CONTEXT_FILES>
|
||||
|
||||
<PAYLOAD mode="APPEND_CHILD" target_node_xpath="//TECHNICAL_DECISIONS/DECISION[@id='tech_logging']">
|
||||
<![CDATA[
|
||||
<EXAMPLE lang="kotlin">
|
||||
<summary>Пример корректного использования Timber</summary>
|
||||
<code>
|
||||
<![CDATA[
|
||||
// Правильно: Прямой вызов статических методов Timber.
|
||||
// Для информационных сообщений (INFO):
|
||||
Timber.i("User logged in successfully. UserId: %s", userId)
|
||||
|
||||
// Для отладочных сообщений (DEBUG):
|
||||
Timber.d("Starting network request to /items")
|
||||
|
||||
// Для ошибок (ERROR):
|
||||
try {
|
||||
// какая-то операция, которая может провалиться
|
||||
} catch (e: Exception) {
|
||||
Timber.e(e, "Failed to fetch user profile.")
|
||||
}
|
||||
|
||||
// НЕПРАВИЛЬНО: Попытка создать экземпляр логгера.
|
||||
// val logger = Timber.tag("MyScreen") // Избегать этого!
|
||||
// logger.info("Some message") // Этот метод не существует в API Timber.
|
||||
]]>
|
||||
</code>
|
||||
</EXAMPLE>
|
||||
]]>
|
||||
</PAYLOAD>
|
||||
|
||||
<IMPLEMENTATION_HINTS>
|
||||
<HINT>Агент должен найти узел `<DECISION id="tech_logging">` в файле `PROJECT_SPECIFICATION.xml` с помощью XPath `//TECHNICAL_DECISIONS/DECISION[@id='tech_logging']`.</HINT>
|
||||
<HINT>Затем он должен добавить XML-блок из секции `<PAYLOAD>` в качестве нового дочернего элемента к найденному узлу `<DECISION>`.</HINT>
|
||||
<HINT>Операция `APPEND_CHILD` означает, что содержимое PAYLOAD добавляется в конец списка дочерних элементов целевого узла.</HINT>
|
||||
</IMPLEMENTATION_HINTS>
|
||||
</WORK_ORDER>
|
||||
</TASK>
|
||||
57
tasks/pending/20250825_100000_create_updateitemusecase.xml
Normal file
57
tasks/pending/20250825_100000_create_updateitemusecase.xml
Normal file
@@ -0,0 +1,57 @@
|
||||
<WORK_ORDER status="pending">
|
||||
<DEFECT_REPORT>
|
||||
<ASSURANCE_REPORT>
|
||||
<METADATA>
|
||||
<work_order_id>20250825_100000_create_updateitemusecase.xml</work_order_id>
|
||||
<target_file>/home/busya/dev/homebox_lens/domain/src/main/java/com/homebox/lens/domain/usecase/UpdateItemUseCase.kt</target_file>
|
||||
<timestamp>2025-08-25T10:30:00Z</timestamp>
|
||||
<overall_status>FAILED</overall_status>
|
||||
</METADATA>
|
||||
|
||||
<SEMANTIC_AUDIT_FINDINGS status="FAILED">
|
||||
<DEFECT severity="MINOR">
|
||||
<location>UpdateItemUseCase.kt:4</location>
|
||||
<description>Keyword 'business_logic' in [SEMANTICS] anchor is not part of the defined taxonomy in SEMANTIC_ENRICHMENT_PROTOCOL.xml.</description>
|
||||
<rule_violated>SemanticLintingCompliance.SemanticKeywordTaxonomy</rule_violated>
|
||||
</DEFECT>
|
||||
<DEFECT severity="MINOR">
|
||||
<location>UpdateItemUseCase.kt:4</location>
|
||||
<description>Keyword 'item_management' in [SEMANTICS] anchor is not part of the defined taxonomy in SEMANTIC_ENRICHMENT_PROTOCOL.xml.</description>
|
||||
<rule_violated>SemanticLintingCompliance.SemanticKeywordTaxonomy</rule_violated>
|
||||
</DEFECT>
|
||||
<DEFECT severity="MINOR">
|
||||
<location>UpdateItemUseCase.kt:35</location>
|
||||
<description>Stray comment '// Assuming these are not updated via this use case' found. All comments must adhere to structured semantic anchors or KDoc.</description>
|
||||
<rule_violated>SemanticLintingCompliance.NoStrayComments</rule_violated>
|
||||
</DEFECT>
|
||||
</SEMANTIC_AUDIT_FINDINGS>
|
||||
|
||||
<UNIT_TEST_FINDINGS status="PASSED"/>
|
||||
|
||||
<REGRESSION_FINDINGS status="PASSED"/>
|
||||
</ASSURANCE_REPORT>
|
||||
</DEFECT_REPORT>
|
||||
<METRICS>
|
||||
<syntactic_validity>1.0</syntactic_validity>
|
||||
<intent_clarity_score>1.0</intent_clarity_score>
|
||||
<specification_adherence_score>1.0</specification_adherence_score>
|
||||
<semantic_markup_quality>1.0</semantic_markup_quality>
|
||||
<estimated_complexity_score>1</estimated_complexity_score>
|
||||
<confidence_score>1.0</confidence_score>
|
||||
<assumptions_made></assumptions_made>
|
||||
</METRICS>
|
||||
<GOAL>
|
||||
Создать недостающий сценарий использования `UpdateItemUseCase` для обновления существующего товара.
|
||||
</GOAL>
|
||||
<INTENT_SPECIFICATION>
|
||||
1. Создать файл `UpdateItemUseCase.kt` в директории `domain/src/main/java/com/homebox/lens/domain/usecase/`.
|
||||
2. Класс `UpdateItemUseCase` должен принимать в конструкторе `ItemRepository`.
|
||||
3. Реализовать `invoke` метод, который принимает объект `Item` и вызывает соответствующий метод `updateItem` у `ItemRepository`.
|
||||
4. Действовать по аналогии с существующим `CreateItemUseCase.kt`.
|
||||
</INTENT_SPECIFICATION>
|
||||
<ACCEPTANCE_CRITERIA>
|
||||
- Файл `UpdateItemUseCase.kt` создан в правильной директории.
|
||||
- Класс `UpdateItemUseCase` реализован и использует `ItemRepository` для обновления товара.
|
||||
- Код соответствует стайлгайду проекта и успешно компилируется.
|
||||
</ACCEPTANCE_CRITERIA>
|
||||
</WORK_ORDER>
|
||||
@@ -0,0 +1,28 @@
|
||||
<WORK_ORDER status="pending_qa">
|
||||
<METRICS>
|
||||
<syntactic_validity>1.0</syntactic_validity>
|
||||
<intent_clarity_score>1.0</intent_clarity_score>
|
||||
<specification_adherence_score>1.0</specification_adherence_score>
|
||||
<semantic_markup_quality>1.0</semantic_markup_quality>
|
||||
<estimated_complexity_score>3</estimated_complexity_score>
|
||||
<confidence_score>1.0</confidence_score>
|
||||
<assumptions_made></assumptions_made>
|
||||
</METRICS>
|
||||
<GOAL>
|
||||
Реализовать `ItemEditViewModel` для управления состоянием экрана редактирования товара.
|
||||
</GOAL>
|
||||
<INTENT_SPECIFICATION>
|
||||
1. Открыть файл `app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditViewModel.kt`.
|
||||
2. Внедрить в конструктор `CreateItemUseCase` и `UpdateItemUseCase`.
|
||||
3. Определить `data class ItemEditUiState` для представления состояния экрана (редактируемый товар, флаги загрузки/ошибки).
|
||||
4. Использовать `StateFlow` для управления `UiState`.
|
||||
5. Реализовать функцию `loadItem(itemId: String)` для загрузки данных товара по ID через соответствующий UseCase.
|
||||
6. Реализовать функцию `saveItem()` которая будет вызывать `CreateItemUseCase` или `UpdateItemUseCase` в зависимости от того, создается новый товар или редактируется существующий.
|
||||
</INTENT_SPECIFICATION>
|
||||
<ACCEPTANCE_CRITERIA>
|
||||
- `ItemEditViewModel.kt` содержит `StateFlow` с `ItemEditUiState`.
|
||||
- Зависимости `CreateItemUseCase` и `UpdateItemUseCase` корректно внедрены.
|
||||
- Функции `loadItem` и `saveItem` реализованы и вызывают соответствующие use cases.
|
||||
- ViewModel успешно компилируется.
|
||||
</ACCEPTANCE_CRITERIA>
|
||||
</WORK_ORDER>
|
||||
@@ -0,0 +1,30 @@
|
||||
<WORK_ORDER status="pending_qa">
|
||||
<METRICS>
|
||||
<syntactic_validity>1.0</syntactic_validity>
|
||||
<intent_clarity_score>1.0</intent_clarity_score>
|
||||
<specification_adherence_score>1.0</specification_adherence_score>
|
||||
<semantic_markup_quality>1.0</semantic_markup_quality>
|
||||
<estimated_complexity_score>3</estimated_complexity_score>
|
||||
<confidence_score>1.0</confidence_score>
|
||||
<assumptions_made></assumptions_made>
|
||||
</METRICS>
|
||||
<GOAL>
|
||||
Реализовать пользовательский интерфейс экрана `ItemEditScreen`.
|
||||
</GOAL>
|
||||
<INTENT_SPECIFICATION>
|
||||
1. Открыть файл `app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditScreen.kt`.
|
||||
2. Добавить `ItemEditViewModel` в параметры Composable-функции `ItemEditScreen`.
|
||||
3. Получить `UiState` из ViewModel.
|
||||
4. На основе `UiState` отобразить поля для ввода данных товара (название, описание, и т.д.). Использовать `TextField` из Jetpack Compose.
|
||||
5. Добавить кнопку "Сохранить" (`Button` или `FloatingActionButton`).
|
||||
6. При изменении текста в полях, вызывать методы ViewModel для обновления состояния.
|
||||
7. При нажатии на кнопку "Сохранить", вызывать метод `saveItem()` у ViewModel.
|
||||
</INTENT_SPECIFICATION>
|
||||
<ACCEPTANCE_CRITERIA>
|
||||
- `ItemEditScreen.kt` отображает поля для редактирования данных товара.
|
||||
- UI реагирует на изменения состояния (`UiState`) из ViewModel.
|
||||
- Пользовательский ввод обновляет состояние в ViewModel.
|
||||
- Кнопка "Сохранить" вызывает `saveItem()` в ViewModel.
|
||||
- Экран успешно компилируется.
|
||||
</ACCEPTANCE_CRITERIA>
|
||||
</WORK_ORDER>
|
||||
@@ -0,0 +1,26 @@
|
||||
<WORK_ORDER status="pending_qa">
|
||||
<METRICS>
|
||||
<syntactic_validity>1.0</syntactic_validity>
|
||||
<intent_clarity_score>1.0</intent_clarity_score>
|
||||
<specification_adherence_score>1.0</specification_adherence_score>
|
||||
<semantic_markup_quality>1.0</semantic_markup_quality>
|
||||
<estimated_complexity_score>2</estimated_complexity_score>
|
||||
<confidence_score>1.0</confidence_score>
|
||||
<assumptions_made></assumptions_made>
|
||||
</METRICS>
|
||||
<GOAL>
|
||||
Обновить навигацию для поддержки экрана редактирования товара.
|
||||
</GOAL>
|
||||
<INTENT_SPECIFICATION>
|
||||
1. Открыть файл `app/src/main/java/com/homebox/lens/navigation/NavGraph.kt`.
|
||||
2. Добавить в навигационный граф маршрут для `ItemEditScreen`, который сможет принимать опциональный `itemId` в качестве аргумента.
|
||||
3. Реализовать навигацию на `ItemEditScreen` с `itemId` с экранов, где есть список товаров (например, `InventoryListScreen`).
|
||||
4. Реализовать навигацию на `ItemEditScreen` без `itemId` (для создания нового товара), например, с кнопки "Добавить".
|
||||
5. В `ItemEditScreen` реализовать навигацию назад (вызов `navigationActions.navController.popBackStack()`) после успешного сохранения товара.
|
||||
</INTENT_SPECIFICATION>
|
||||
<ACCEPTANCE_CRITERIA>
|
||||
- В `NavGraph.kt` определен маршрут для `ItemEditScreen` с аргументом `itemId`.
|
||||
- Осуществляется корректный переход на экран редактирования как для создания, так и для редактирования товара.
|
||||
- После сохранения товара происходит возврат на предыдущий экран.
|
||||
</ACCEPTANCE_CRITERIA>
|
||||
</WORK_ORDER>
|
||||
Reference in New Issue
Block a user