Урок

Урок 7. Проходим SDD вручную

Результат: обработка из урока 5 предсказуемо разбирает повтор артикула в прайс-листе. Ты прошёл путь от правил до проверки в 1С без bsl-flow и увидел, за какими шагами пришлось следить самому.

Время
Самостоятельная практика
Артефакт
Проверенное правило обработки повторяющегося артикула в прайс-листе
Контрольная точка
Спецификация, ревью, реализация и проверка пройдены вручную по порядку

Результат: обработка из урока 5 предсказуемо разбирает повтор артикула в прайс-листе. Ты прошёл путь от правил до проверки в 1С без bsl-flow и увидел, за какими шагами пришлось следить самому.

В уроке 5 одна строка с повтором COURSE-A имела отрицательную цену и сразу отклонялась как ошибка. Теперь поставщик прислал две правильные строки с тем же артикулом, но разными ценами. Какую применять? Если не ответить до кода, агент может взять первую, последнюю или обе. Попробуем SDD: сначала договоримся о поведении, потом изменим обработку и сравним результат с договорённостью. OpenSpec и bsl-flow пока не устанавливай; для исходников остаются Codex и Unica из предыдущих уроков.

1. Подготовь маленький пример

В отдельной учебной УНФ используй вымышленные товары COURSE-A и COURSE-B из урока 5. Перед новым запуском цена A должна быть 100, цена B — 120 рублей в том же виде цены и на согласованную дату. Создай новый UTF-8 CSV; файл урока 5 оставь как был:

Артикул;Цена
COURSE-A;105
COURSE-A;110
COURSE-B;130
COURSE-MISSING;50

Правило для упражнения: если в одном файле артикул встретился больше одного раза среди строк с корректной ценой, все его повторяющиеся строки получают ошибку, а цена товара по ним не меняется. Другие строки обрабатываются. Неизвестный артикул остаётся ошибкой; новые товары не создаются. Сопоставление артикула использует тот же ключ и нормализацию, что уже приняты в обработке урока 5. Если этот ключ ещё не определён однозначно, вернись к предыдущему уроку до новой доработки.

Значит, предпросмотр должен показать: строки 2 и 3 — ошибки повтора, строка 4 — обновление B до 130, строка 5 — ошибка неизвестного артикула. Итого одно обновление и три ошибки. Предпросмотр не пишет в базу. После применения A остаётся 100, B становится 130. При повторном запуске обновлений уже нет, а три ошибки остаются. Номера строк считаем вместе с заголовком CSV.

2. Сначала закажи короткую спецификацию

В проекте с исходниками EPF открой новую задачу Codex «Повторы артикула в прайсе». Не проси сразу менять BSL. Отправь:

Исследуй текущую внешнюю обработку загрузки прайса из урока 5.
Найди, где читается CSV, определяется действие строки и пишется цена.
Исходники EPF пока не меняй. Для нового файла из урока 7 создай короткий
docs/price-import-duplicates.md: правило повтора, четыре ожидаемые
строки предпросмотра, результат первого и повторного применения,
а также что остаётся вне задачи. Привяжи каждую проверку к
наблюдаемому результату. Не добавляй OpenSpec или bsl-flow.

Агент создаёт небольшой файл спецификации; тебе не нужно вести журнал урока. Прочитай его до реализации. В нём должны быть все повторяющиеся строки, а не «оставляем последнюю цену». Проверь, что предварительный просмотр и применение используют одно правило и что прежний сценарий без двух правильных повторов не ломается. Если агент не нашёл текущий механизм сопоставления, спецификация пока не готова.

3. Проверь спецификацию отдельно

Открой вторую задачу Codex в том же проекте: «Ревью правила повторов». Она видит файл спецификации, но не переписку первой задачи. Дай ей только работу на чтение:

Проверь docs/price-import-duplicates.md по текущим исходникам EPF
и четырём строкам учебного CSV. Ищи неоднозначные правила, пропущенную
проверку и влияние на обычный файл без повторов. Ничего не меняй.
Скажи, какое требование нельзя проверить по описанному сценарию.
Не соглашайся со спецификацией только потому, что она уже написана.

Сверь замечания сам. Если правило или ожидаемое число неверно, вернись в первую задачу и попроси исправить спецификацию до кода. Это отдельный взгляд на документ, но он ещё не гарантирует независимую экспертизу: обе задачи могут использовать одну модель и одни ошибочные предположения.

4. Реализуй только согласованное

В задаче «Повторы артикула в прайсе» продолжи после проверки спецификации:

Реализуй правило из docs/price-import-duplicates.md в одной внешней
обработке. Предпросмотр и применение должны одинаково определять
повторы до записи цены. Не меняй формат CSV, ключ сопоставления,
создание товаров и расписание. Покажи ограниченный diff, диагностику
BSL и проверки для нового файла и старого файла без правильных
повторов. Не загружай EPF в базу.

Сам сравни diff со спецификацией: нет ли записи в режиме предпросмотра, не зависит ли результат от порядка двух строк A, не затронут ли чужой код. Затем вернись в задачу ревью и попроси сравнить фактический diff с тем же файлом требований. Замечание к реализации исправляй в задаче реализации; после исправления сверяй уже новый diff.

5. Проверь поведение

Собери EPF и открой именно собранный файл в учебной базе. Сначала получи предпросмотр 1 обновление / 3 ошибки и отдельно убедись, что цены остались 100 и 120. Затем примени новый файл: A остаётся 100, B становится 130. Повтори его запуск: обновлений нет. После этой проверки открой старый файл из урока 5: при текущих ценах A=100 и B=130 он должен предложить вернуть B к 120, пропустить A и показать две прежние ошибки. Так ты проверишь обычный файл без двух правильных повторов. Если какое-то наблюдение расходится со спецификацией, возвращайся к соответствующему шагу; одна успешная диагностика BSL не доказывает поведение EPF.

Что в ручном процессе оказалось неудобным

Ты сам переключал задачи Codex, следил за порядком «спецификация → ревью → код → проверка», возвращал замечания в нужный диалог и сопоставлял тесты с требованиями. Codex не запрещал перейти к коду с непринятой спецификацией или забыть повторный запуск. Отдельное ревью помогло, но его результат пришлось связать с актуальной версией файла вручную.

Это не делает ручной SDD бесполезным: для небольшой доработки он вполне подходит. На следующем уроке возьмём новую задачу, где правил и возможных остановок больше, и посмотрим, какие из этих переходов ведёт bsl-flow. Проверку поведения в учебной 1С всё равно выполняют отдельно.