Skip to content

masters launch: запуск черновика должен быть отдельной командой, а не флагом update --launch #704

Description

@axisrow

masters launch — запуск черновика должен быть отдельной командой, а не флагом update --launch

Сейчас единственный способ опубликовать DRAFT-кампанию — masters update <id> --launch. Это расходится и с вебом, и с контрактом остальных команд
этого CLI.

1. --launch нельзя передать в одиночку

$ direct masters update 713231614 --launch --format json
Error: Provide at least one of --weekly-budget, --promotion-goal,
--directs-helps/--no-directs-helps, --name, --headline, --text, --image.

(direct_cli/commands/masters.py:1096)

--launch — модификатор сохранения формы, а не действие: он выбирает,
какой из двух терминальных кнопок сохранить (#668). Поэтому запустить
черновик, ничего не меняя, невозможно
— приходится передавать поле
повторно с тем же значением только ради того, чтобы дойти до кнопки:

$ direct masters update 713231614 --weekly-budget 3000 --launch --format json
{
  "CampaignId": 713231614,
  "WeeklyBudget": 3000
}

Это искусственная мутация: лишний проход _set_weekly_budget +
_verify_saved на ровном месте, при том что запись значения, которое уже
стоит, не нужна никому.

В вебе так не надо. На странице черновика кнопка «Запустить кампанию»
доступна сама по себе, правка полей для запуска не требуется.

2. Расходится с контрактом соседних команд

У campaigns каждое изменение состояния — отдельная команда-глагол, а не
флаг к update:

direct campaigns resume    --id N
direct campaigns suspend   --id N
direct campaigns archive   --id N
direct campaigns unarchive --id N

У masters этот же принцип уже соблюдён для трёх команд —
masters suspend|resume|archive CAMPAIGN_IDS (список через запятую,
ничего не правят, проверяют смену статуса, идемпотентны). Из общего ряда
выбивается только запуск.

3. Молчаливый результат

Вывод выше — {"CampaignId": ..., "WeeklyBudget": 3000}. Про смену
статуса нет ни слова
, хотя кампания реально ушла DRAFT → MODERATION
(проверено отдельным masters list). Самое необратимое действие команды
проходит молча.

При этом в copy_master для этого уже есть поле:
result["Launched"] = launch (direct_cli/browser/masters.py:1239).

Предлагаемое решение

direct masters launch CAMPAIGN_IDS

Контракт — как у masters suspend|resume|archive: список ID через
запятую, проверка фактической смены статуса перед рапортом об успехе,
идемпотентность на не-DRAFT (как --launch сейчас: «Has no effect on a
non-DRAFT campaign»). Реализация переиспользует уже существующий
_click_draft_terminal_button(page, campaign_id, launch=True) из #668.

Практическая мотивация: в партии Мастеров 2026-08 — 20 черновиков.
Разница между одной командой со списком и 20 вызовами update с
фиктивной правкой бюджета существенная.

Судьбу update --launch после этого — на усмотрение: оставить как
низкоуровневый «сохранить-и-опубликовать» или убрать в пользу launch.
Минимум — добавить "Launched": true в вывод.

Живая проверка (что уже подтверждено)

CLI direct, version 0.5.1
main aad9ccc
Кампания 713231614 «Мастер ИЖ-1 Сосуды и вены (холодный)»
Результат DRAFT → MODERATION, подтверждено masters list
Дата 2026-08-04

Сам механизм публикации из #668 работает — претензия только к форме
вызова и к молчаливому выводу.

Связано: #668 (DRAFT save/launch), #702 (живая проверка
--weekly-budget), #648 (умбрелла).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions