| research |
product-researcher |
В Portfolio DTO нет сектора и эмитента, хотя T-Bank их отдаёт. Доля топ-5 понятнее HHI. Общий мультивалютный рейтинг без конвертации некорректен. «Структура» дублировала бы существующий виджет. |
MVP: акции, облигации, секторы; позже: страна, maturity, riskLevel, P&L, HHI; не делать: кредитный рейтинг, конвертацию, treemap |
Найден: полнота sector неизвестна. Исключено: смешение валют |
Нет |
— |
1 вызов |
Шаблон «must / later / no» для выбора критериев |
| proposal |
product-analyst + основной агент |
Эмитент требует отдельной идентичности; основной агент нашёл в proto T-Bank AssetFull.brand {uid, name, company, sector} (краткий Asset бренда не содержит). 8 Open Decisions, 3 из них меняют scope |
Владелец: «Эмитенты» в MVP (отклонение от research: Later → MVP), эмитент = бренд T-Bank, фонды не входят, госбумаги — по сектору T-Bank, режим lab |
Найден: «Эмитенты» зависят от полноты бренда. Исключено: группировка по названию |
Валидация change ждёт delta specs (ожидаемо) |
— |
1 вызов + 2 вопроса владельцу |
Решать scope-вопросы до G1 через короткий опрос |
| G1 review |
independent reviewer + product-analyst |
Источник бренда указан неточно (Asset вместо AssetFull.brand); «Секторы» не задавали набор типов; раскрытие «Прочее» было Open Decision; не зафиксировано отклонение от research |
Владелец (Issue #48, комментарий): «Прочее» раскрывается; без бренда — fallback «Эмитент не указан» без нового G1; «Секторы» только STOCK/BOND/FUND; общий топ-5 вне scope |
Найден: несоответствие источника и scope. Исключено: зависимость «Эмитентов» от полноты бренда |
Proposal правился после review; Gate Log не заполнялся |
— |
1 вызов |
Сверять ссылки на proto с исходником до G1 |
| specs |
product-analyst |
Остальные нормы вкладки не требуют новых источников; в canonical нет перечня вкладок страницы счёта и правил выбора валюты «Структуры портфеля» (они только в коде и docs) — правила валюты, округления, равных сумм определены в Specs и вынесены на подтверждение G2. Эмитент и сектор — новые поля позиции Portfolio |
2 дельты: новая portfolio-concentration (23 Requirement), portfolio-view MODIFIED «Нормализованный состав Portfolio». Решения владельца (3078) внесены |
Найден: расхождение «Структуры портфеля» (деньги в знаменателе и в валютах) и вкладки (без денег) — различие зафиксировано явно |
Нет |
— |
1 вызов |
Сверять правила «как в существующем виджете» с canonical до написания, а не с кодом |
| G2 review |
qa-engineer + independent-reviewer + product-analyst |
Валюты вкладки не были определены независимо от «Структуры»; «Прочее» при шести элементах скрывало одну строку; метод наибольшего остатка противоречил показу долей в карточках; подписи секторов без источника; не было граничных сценариев 5/6 элементов и противоречивый GIVEN |
Владелец (3079): свой список валют вкладки; округление как в карточках, «< 0,1 %»; «Прочее» от семи элементов. Автор: список валют включает отрицательные и нулевые позиции STOCK/BOND/FUND; null считается в сноске при любой валюте |
Найден: расхождение формата долей между спеками и кодом. Исключено: инвариант «100,0 %» на показанных значениях |
Gate Log ведёт основной агент (G1 инвалидирован) |
— |
1 вызов |
Сверять формат чисел с кодом существующего виджета до написания норм |
| specs rev2 |
product-analyst |
G2 инвалидирован решениями 3081: issuer у фондов в данных; обновление sector/brand раз в сутки с последним известным значением; отказ token — как существующая недействительность; trim пробелов; имя эмитента по наибольшей позиции; сохранение выбора в пределах страницы; метрика топ-5 при ≥6 элементах; центр кольца; «Данные неполные» |
portfolio-concentration 28 Requirement (+5: вкладка в состояниях страницы, название эмитента при разных названиях, центр диаграммы, строки без переходов, предупреждение о неполных данных; «Суммарная доля топ-5» и «Начальное состояние» переписаны); portfolio-view MODIFIED + 3 ADDED (срок обновления, последнее известное, ошибки получения) |
Найден: «Данные неполные» привязано к meta по tbank-data-sync, не к неоценённым позициям. Исключено: конфликт metadata/invalid token (отсылка к существующему поведению) |
Gate Log ведёт основной агент |
— |
1 вызов |
Сверять производные analysis-артефакты с Delta Specs до G2 |
| specs rev3 |
product-analyst |
G2 re-review: хранение sector/brand противоречило «Свежесть и fallback» (только онлайн, без долговременного справочника) и «metadata не определяет успешность»; граница 24 ч была сформулирована как «24 ч + интервал»; «не найдено», пустой ответ и ответ о другом активе не были определены |
3082: исключение для sector/brand; «не найдено» = «значения нет»; равные наибольшие позиции эмитента — по алфавиту; предупреждение о неполных данных только на вкладке |
portfolio-view: MODIFIED «Свежесть и fallback» (полная копия + 2 исключения и 2 сценария), ADDED «Обновление сектора и эмитента» и «Результат получения сектора и эмитента» (таблица исходов), без дублей; portfolio-concentration: название эмитента по алфавиту, предупреждение без дубля |
Найден: страничного сообщения о неполноте в canonical «Состояния и ошибки Portfolio на клиенте» нет (требует лишь не выдавать неполный итог за окончательный), поэтому MODIFIED для него не нужен. Исключено: дублирование норм об ошибках |
Gate Log ведёт основной агент |
— |
1 вызов |
| design ∥ qa-analysis |
solution-architect, qa-engineer |
Общий metadata-кэш не подходит под 24 ч и 4 исхода, нужна отдельная таблица классификации; шаг классификации должен идти до publish, иначе отказ token не инвалидирует подключение; DonutChart 9.7.3 хватает без прямого recharts |
Таблица TbankInstrumentClassification, opt-in NOT_FOUND только для новых вызовов, состояние вкладки поднято в page VM; владелец: ~25 ч, квоты в QA до G4, «Государственный сектор» в общем словаре (3084) |
Найдено: изменение страницы акции вне Specs (одобрено 3084); откат образа без миграции |
Субагенты не видели полный текст review, findings пересылались вручную |
— |
2 вызова + 3 доработки |
Сверять design-ссылки на код до G3 |
| test-cases + docs-impact + tasks |
qa-engineer, documentation-engineer, solution-architect |
21 из 30 зарезервированных TC ничего не добавляли сверх Scenario и выброшены; «эмитент» конфликтует с термином docs |
15 TC + TC-CONC-020; глоссарий с оговоркой, ADR 022 (3083); 28 tasks по 4 repo |
Найдено: 2 неверных oracle (TC-CONC-007, TC-META-003) |
— |
— |
3 вызова |
Пересчитывать oracle независимым ревьюером |
| G3 review |
independent-reviewer, frontend-engineer; backend-engineer — сбой по квоте API (3 попытки) |
4 major, 4 minor, Q2 (откат без миграции); frontend API DonutChart подтверждён |
Все findings закрыты; backend-утверждения design (до publish, InvalidToken catch, NOT_FOUND в call(), WORK_WAIT_BOUND_MS) основной агент сверил с кодом вручную |
Остаётся: backend-ревью субагентом не выполнено |
Квота API |
— |
5 вызовов |
Ревью backend повторить на G4 |