12 KiB
12 KiB
Process Record
Mode: lab Class: standard Issue: WealthLedger/main#47
Change Profile
| Artifact | Selected | Reason |
|---|---|---|
| research | no | Это потребность самого Change Owner, а as-is уже разобран и записан в Proposal Evidence. Рынок и альтернативы изучать не нужно. |
| ux-design | yes | Trigger: на четырёх экранах режима «все счета» появляется новый паттерн представления (заголовок группы, итог, разбивка по счетам), и он должен уживаться с существующими карточками событий и операций. |
| system-analysis | no | Не trigger: межсистемный contract, data ownership и интеграции не меняются. Это представление уже полученных данных внутри frontend. |
| data-mapping | no | Модуль требует system-analysis, а она не выбрана. Ключ группы, правило итога и запрет смешивания валют задаются Requirements в specs и проверяются в test-cases. |
| failure-model | no | Нет внешней интеграции, фоновой синхронизации и многошаговой записи. Состояния загрузки и ошибок списков не меняются. |
| nfr | no | Группировка охватывает уже загруженные строки списка. Значимых ограничений по performance, availability или capacity нет. |
| observability | no | Клиентское представление без фоновых процессов. Оператору нечего отличать. |
| security-analysis | no | Модель доступа, trust boundaries и состав раскрываемых данных не меняются: показываются те же записи текущего User. |
| test-cases | yes | Trigger: денежные итоги групп, граничные случаи ключа (тип, дата, отсутствие Instrument, один счёт, разные валюты) и стык загруженных страниц. Для их проверки нужны конкретные данные и oracle. |
| docs-impact | no | Обновляются только AS-IS страницы доменов (4 файла в docs/domains/). ADR, architecture- и integration-страниц нет. Цели перечислены в ## Docs Impact в tasks.md. |
Gate Log
| Gate | Date | Scope | Validation | Findings | Decision |
|---|---|---|---|---|---|
| G1 | 2026-10-29 | proposal, change-profile | check.cjs plan OK; openspec validate — ожидаемая ошибка «no deltas» до specs; G1 review product-analyst |
2 blocker, 5 major, 1 minor — закрыты решениями владельца в Proposal | approved "все ок, идем дальше" |
| G2 | 2026-10-29 | specs | openspec validate --strict valid; check.cjs plan OK; G2 review qa-engineer + independent-reviewer |
2 blocker, 6 major, 8 minor — закрыты правками specs и решением владельца (итог скрыт при partial) |
approved "да, все ок, идем дальше" |
| G2 | 2026-10-29 | specs | — | UX нашёл 2 пробела в specs: итог при неполном прогнозе; нулевая сумма | invalidated: решения владельца в текущей сессии («Скрывать, как в журнале», «Скрывает итог») изменили Requirements об итоге группы журнала и событий |
| G2 | 2026-10-29 | specs | openspec validate --strict valid; check.cjs plan OK |
Правки по 2 UX findings внесены в specs | approved "да, все ок" |
| G3 | 2026-10-29 | design, ux-design, qa-analysis, test-cases, tasks | openspec validate --strict valid; check.cjs plan planning complete; git diff --check clean; G3 review independent-reviewer |
3 major, 5 minor — исправлены | approved "да, давай дальше" |
| G4 | 2026-10-29 | implementation, review, QA, docs | frontend npm run verify exit 0 (530 tests, coverage 92.35%); docs npm run verify OK; independent review; QA в браузере (18 TC/сценариев pass); openspec-verify-change: 0 critical, все warnings закрыты; check.cjs apply OK |
Review 3 major + 5 minor, verify 2 warning + 2 suggestion; всё исправлено. Flaky screen-sync.test.tsx есть и до change, файл не менялся |
approved "да, все ок, давай коммититься" |
Descoped Work
| Task | Reason | Gate |
|---|
Lab Journal
| Stage | Role / subagent | Unique findings | Decisions | Risks found / excluded | Handoff issues | Skills | Cost | Transferable |
|---|---|---|---|---|---|---|---|---|
| proposal + change-profile | product-analyst (G1 review) | Режим «Все счета» потерян в canonical ledger/income; запрет frontend-пересчёта итогов в «Выплатах»; неоднозначности даты и типа, порядка, лимита превью | 7 решений Change Owner внесены в Proposal | blocker ×2, major ×5, minor ×1; все закрыты | Ответ сабагента дважды обрезался, пришлось запрашивать продолжение | openspec-new-change | 3 вызова сабагента | Делать G1 review до показа владельцу: он нашёл canonical drift |
| specs | qa-engineer, independent-reviewer (G2 review) | Затронутые canonical блоки (compact rows, обзор, список событий без итога) нужно было модифицировать; восстановление all было неполным относительно archive; конфликт итога с frontend-data-resilience; ключ «точный тип» неоднозначен для покупки и продажи |
Итог скрывается при partial (решение владельца); граница страницы — явное исключение; блоки восстановлены из archive целиком |
2 blocker, 6 major, 8 minor; все закрыты правками. Вне scope: canonical drift persist-tbank-data шире двух восстановленных блоков | Ответы сабагентов трижды обрезались | openspec-new-change | 4 вызова сабагентов | Ревьюеру консистентности давать список canonical блоков, которые затрагивает UI-изменение |
| design + ux-design + qa-analysis + test-cases + tasks | ux-designer, solution-architect, qa-engineer, independent-reviewer (G3 review) | UX: 2 пробела в specs (неполный прогноз, нулевая сумма), из-за них G2 переутверждён. Design: instrumentKey не является identity, у журнала пагинация назад/вперёд, а не дописывание, BigInt-decimal уже есть в positions.ts. Review: test-cases ссылались на несуществующие сценарии, неверные oracle в TC-PAG |
Ссылки на счёт оставлены текстом, как сейчас; лимит превью считается по записям; Docs Impact перенесён в tasks | G3 review: 3 major, 5 minor, все исправлены. Вне scope: drift с фильтрами событий записан в specs#63 | qa-engineer сначала выдал 46 TC вместо case-only; сабагенты обрезались | — | 7 вызовов сабагентов | Давать QA правило «case только сверх Scenario» сразу; проверять ссылки на сценарии через grep |
| apply + G4 checks | frontend-engineer, documentation-engineer, independent-reviewer, qa-engineer | Review: имя группы для скринридера неполное, у выплат терялись occurrence keys, выплаты в группе не были карточками, ссылки на счета появились вопреки UX. QA: 18 проверок pass в браузере со stubbed API | Все findings исправлены. QA D1 (заголовок «Дивиденд») — артефакт заглушки с type: "Купон" вместо OPERATION_TYPE_COUPON, не дефект. D2 опровергнут кодом: aria-label стоит на вложенном ul по UX |
Flaky screen-sync.test.tsx есть и до change, файл не менялся; на baseline 3/3 pass |
Исполнитель дважды молча отклонился от UX; поймано review | — | ~9 вызовов сабагентов | Давать исполнителю явный список Presentation Decisions; QA строить заглушки только из enum generated types |
| verify (openspec-verify-change) | основной агент | Строка записи в группе журнала показывала дату вместо подписи типа (расхождение с Full ledger presents compact rows); у сценариев BUY/SELL, «итог в нескольких валютах» для событий и «оферта» не было автотестов |
Исправлено: подпись типа в строке, aria-label у карточки-строки, 4 новых теста |
0 critical, 2 warning, 2 suggestion; все закрыты | — | openspec-verify-change | 1 проход | Verify по сценариям находит то, что пропустили review и QA |
Retrospective
Факты
- 4 gate, 1 инвалидация G2: UX нашёл 2 пробела в specs (итог при неполном прогнозе, нулевая сумма).
- Независимый review находил реальные дефекты на каждом gate:
- G1: в canonical specs потерян режим
all; спека «Выплат» запрещала frontend считать итоги. - G2: группировка нарушала canonical requirements, которые change не модифицировал.
- G3: test-cases ссылались на несуществующие сценарии, а oracle пагинации были неверны.
- G4: имя группы для скринридера, повторные ключи выплат, ссылки на счета вопреки UX.
- G1: в canonical specs потерян режим
- Verify по сценариям нашёл расхождение, которое пропустили review и QA: в строке группы не было подписи типа.
- Побочный результат — WealthLedger/specs#63: canonical drift после archive
persist-tbank-data. - Стоимость: около 25 вызовов сабагентов. Ответы часто обрезались, так что прятались продолжения.
Оценка
- Окупились: G1/G2 review (без них delta строилась бы на неполном каноне), ux-design (нашёл пробелы в specs), verify по сценариям.
- Избыточным для standard UI-change оказался первый вариант QA-артефактов: 46 TC вместо cases «сверх Scenario». Пришлось переписать.
- Изменить в schema: в instruction для qa-analysis/test-cases явно требовать ссылки на существующие
#### Scenarioи проверку их grep-ом. В brief для исполнителя передавать Presentation Decisions из ux-design как обязательный список.