Files
specs/openspec/changes/group-account-rows-by-instrument/process-record.md
T
codex-bot f3a6b78461
Specs security / security (push) Successful in 7s
Specs verify / verify (push) Successful in 9s
spec: plan grouping of all-account rows by instrument (WealthLedger/main#47) (#64)
2026-10-30 07:28:31 +03:00

12 KiB
Raw Blame History

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.
  • 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 как обязательный список.