Урок
Урок 8. Передаём SDD-процесс bsl-flow
Результат: ты проводишь новую доработку расширения через bsl-flow и видишь, какие этапы он ведёт после ручного SDD из прошлого урока.
- Время
- Самостоятельная практика
- Артефакт
- Доработка пакетной XML-выгрузки, проведённая через BSL Flow Managed
- Контрольная точка
- Core и Managed одной версии установлены, а этапы задачи подтверждены свидетельствами
Результат: ты проводишь новую доработку расширения через bsl-flow и видишь, какие этапы он ведёт после ручного SDD из прошлого урока.
В прошлом уроке ты сам следил за порядком спецификации, ревью, реализации и проверки. Теперь коллега просит: «Сделай выгрузку нескольких заказов в XML. Если один не выгрузился, остальные должны уйти». В этой фразе нет ответа на важные вопросы. Что значит «ушли» — файлы на диске или HTTP-отправка? Что делать при повторе? Как назвать файлы? Можно ли оставить часть результата после ошибки? Начинать с генерации кода рано.
Для упражнения остаёмся в учебном расширении урока 4. Здесь «выгрузка» означает локальные файлы, без сети. Новая команда получает список выбранных учебных заказов. Один файл — один заказ, содержимое по формату урока 4. Имя файла строится из стабильного идентификатора заказа. Существующий файл не перезаписывается. Ошибка одного заказа не останавливает остальные; итог показывает число созданных, пропущенных и ошибочных файлов. Пустой выбор не создаёт файлов. Эти правила выбраны для упражнения; для рабочей задачи их надо согласовать с владельцем процесса.
Что здесь добавляет bsl-flow
Ручной SDD уже показал пользу спецификации: правила повтора попали в код после проверки, а не по догадке агента. Здесь больше вариантов поведения и этапов, за актуальностью которых пришлось бы следить самому: выбор заказов, имена файлов, повтор, частичная ошибка и проверка результата.
BSL Flow даёт 1С-проекту навыки для исследования, спецификации, ревью, реализации и проверки. Начиная с 0.9, он поставляется двумя пакетами:
| Пакет | Для чего нужен |
|---|---|
| Core | Работа с отдельными навыками, OpenSpec, статические проверки и независимое ревью одним рецензентом. Порядок шагов выбираете ты и текущий агент — это режим assisted |
| Managed | Дополнение к Core: контроллер ведёт задачу через этапы, сохраняет состояние, проверяет результаты и поддерживает консилиум рецензентов |
Для разовой спецификации или исправления часто достаточно Core. Для длинной задачи с сохранением состояния и проверками на каждом этапе выбирай Managed. В этом уроке используем Managed через навык 1c-task.
Core рассчитан на Windows, Linux и macOS; Managed работает только на Windows. Установка и подготовка проекта оставляют его в Core. Управляемая задача начинается лишь по твоему явному запросу. Ни один пакет сам по себе не подключает базу и не разрешает загрузку изменений.
1. Установи Core и Managed на Windows
Порядок ниже сверён с документацией 0.9.0-dev.1 — предварительной версии BSL Flow. Перед установкой прочитай актуальную инструкцию. Версии Core и Managed должны совпадать точно, включая суффикс предварительной версии.
Для работы по этому уроку нужны PowerShell 7, Git, Node.js, OpenSpec и Codex CLI. Для Managed используй машинную установку PowerShell 7 в C:\Program Files\PowerShell\7\pwsh.exe. Проверь команды в новом терминале PowerShell 7:
pwsh --version
git --version
node --version
openspec --version
codex --version
Если OpenSpec отсутствует, установи версию из INSTALL.md. Для указанной редакции проверенная версия — @fission-ai/openspec@1.11.0. Сам установщик Core не требует API-ключа, CLI модельного провайдера или .NET SDK. Codex CLI нужен для работы выбранного в уроке исполнителя, а настройка ревью проверяется отдельно.
Склонируй репозиторий в отдельную папку вне проекта УНФ. Если клон уже есть, используй его. Команды для нового клона:
git clone https://github.com/fokusov/bsl-flow.git C:\AI-Course-Work\bsl-flow
Set-Location C:\AI-Course-Work\bsl-flow
Get-Content .\INSTALL.md -TotalCount 100
pwsh -NoProfile -File scripts/Install-BSLFlowCore.ps1 -Host codex -WhatIf
Просмотри план: установщик обновляет навыки, схему OpenSpec и управляемый блок инструкций агента, сохраняя резервные копии. Если выбран правильный хост и каталоги, установи Core:
pwsh -NoProfile -File scripts/Install-BSLFlowCore.ps1 -Host codex
Затем из той же версии поставки просмотри план Managed и выполни установку:
pwsh -NoProfile -File scripts/Install-BSLFlowManaged.ps1 -WhatIf
pwsh -NoProfile -File scripts/Install-BSLFlowManaged.ps1
Прежний Install-BSLFlow.ps1 сохранён как установка полного комплекта. Это альтернативный путь: выполнять его дополнительно после двух установщиков не нужно.
Если BSL Flow уже установлен
Для версии 0.9 проверь записи установки и наличие навыков:
Get-Content "$env:USERPROFILE\.bsl-flow\installed-core.json"
Get-Content "$env:USERPROFILE\.bsl-flow\installed-managed.json"
openspec schema validate bsl-flow
Test-Path "$env:USERPROFILE\.agents\skills\1c-init-project\SKILL.md"
Test-Path "$env:USERPROFILE\.agents\skills\1c-task\SKILL.md"
Версии в двух записях должны совпасть, схема — пройти проверку, обе команды Test-Path — вернуть True. После установки перезапусти Codex. Если нужная версия уже установлена, повторять установку не требуется.
При переходе с 0.8 установи Core, затем Managed той же версии по руководству миграции. Core сохраняет старые файлы Managed, поэтому наличие 1c-task после обновления ещё не подтверждает совместимость контроллера.
Проверка файлов подтверждает установку, но не готовность исполнителя, рецензента или базы. Настрой провайдеров по INSTALL.md; секреты храни вне учебного Git-проекта и не вставляй в чат. YAxUnit и Vanessa не нужны для самой установки, но понадобятся, если выбранные проверки используют их.
2. Подготовь учебный проект
Вернись в Codex, открой проект с разрешёнными исходниками учебной УНФ и расширения. Создай отдельную задачу «Подготовить bsl-flow». Попроси проверить точный корень Git-проекта, существующие AGENTS.md, bsl-flow.yaml, .bsl-flow/project.yaml и openspec/config.yaml. Если проект ещё не инициализирован и конфликтов нет, агент применяет установленный 1c-init-project к этому корню, затем показывает созданные файлы и результат проверки схемы. Для нового пустого каталога сначала нужно явно подтвердить, что он и есть корень 1С-проекта; обычную папку с курсом или папку с базами инициализировать нельзя.
После подготовки в проекте должны быть схема bsl-flow, конфигурация и правила проекта. Проверь git status --short: контроллер Managed начинает работу из чистого Git-проекта. Если изменения прошлых уроков ещё не приняты, сначала заверши их проверку и сделай локальный коммит; публиковать его для урока не нужно. Это пока не доказывает, что контроллер сможет выполнить ревью или тесты. Если установка навыка, bootstrap или обязательный провайдер не готовы, остановись на этом шаге и сверяй сообщение ошибки с INSTALL.md и контрактом 1c-task.
3. Найди границы изменения
Начни новую задачу Codex «Пакетная XML-выгрузка» в том же проекте. Она не наследует переписку об установке, зато видит подготовленные файлы проекта. Сначала попроси агента исследовать существующую выгрузку:
Исследуй наше учебное расширение из урока 4. Найди команду выгрузки
одного заказа, её входы и побочные эффекты, форму списка заказов
и подходящую точку для команды пакетной выгрузки. Ничего не меняй.
Покажи реальные объекты и файлы, а также вопросы, без ответов
на которые нельзя формулировать задачу для bsl-flow.
Сверь ссылки на объекты с исходниками. Вопросы об идентичности файла, повторе и частичной ошибке должны появиться до кода. Если агент их пропустил, укажи на эти три ситуации явно.
4. Передай задачу в bsl-flow
Теперь у агента есть факты и правила. Отправь ему запрос как на управляемую задачу 1c-task, без самостоятельного перескакивания между этапами:
Создай задачу BSL Flow Managed через 1c-task для учебного расширения.
Цель: пакетная локальная XML-выгрузка выбранных заказов через новую
команду, используя формат выгрузки одного заказа из урока 4.
Один заказ — один файл по стабильному идентификатору. Существующий
файл не перезаписывать; при ошибке одного заказа продолжать остальные.
Пустой выбор не создаёт файлов. Итог: создано / пропущено / ошибки
с указанием конкретных заказов. Сеть и типовую конфигурацию не менять.
Сначала подготовь спецификацию с наблюдаемыми критериями и проверь её
по маршруту проекта. Покажи мне вопрос, если правило осталось неясным.
Только после готовой спецификации запускай предусмотренные этапы
реализации и проверки. Не загружай расширение в базу.
Продолжай эту же задачу Codex: исследование и запуск Managed служат одному результату. После регистрации контроллер вернёт идентификатор задачи bsl-flow, а Run проведёт её через нужные этапы. Если он остановится и попросит ответ, уточни правило в той же задаче; не регистрируй вторую задачу bsl-flow ради повтора. На шаге спецификации ищи не длинный документ, а ответы на конкретные вопросы: какой заказ попадёт в выбор, что считается повтором, что происходит с уже созданными файлами после ошибки, где виден итог.
5. Сверь результат с четырьмя сценариями
Подготовь в учебной базе три вымышленных заказа. Для первого заранее создай файл с ожидаемым именем: он должен быть пропущен. Для второго попроси агента предусмотреть контролируемую ошибку файловой записи в тесте без изменения рабочих правил. Третий должен выгрузиться после этой ошибки: так проверяется продолжение обработки. Ожидаемый итог согласуй со спецификацией: один созданный файл, один пропуск, одна ошибка. Отдельно проверь пустой выбор и повтор. Если воспроизвести ошибку записи в твоём контуре нельзя, не объявляй этот сценарий пройденным.
До запуска в 1С прочитай итог контроллера: какие исходники менялись, что прошло статическую проверку, какие тесты действительно запускались и что осталось без runtime-доказательства. Сборка .cfe, загрузка в учебную базу и проверка команды — отдельные шаги. Установленный bsl-flow может подтвердить только поддерживаемый им нативный контур; успешный source-only прогон не означает, что эта команда уже работает в твоей УНФ.
SDD здесь полезен тем, что неприятные варианты поведения получают ответ до кода. Самый важный результат урока — совпадение реализованной команды и наблюдаемых сценариев с согласованной спецификацией. Если нужный тестовый контур пока недоступен, не выдавай исходники за проверенную пакетную выгрузку.