# Контракт четырёх результатов Источники: `input/company.json`, `input/brief.md`, `input/package-brief.json`, `input/query-intents.csv`, `input/task.json`. Сохраните SHA256 **реально прочитанных байтов каждого файла**, не вычисляйте их по пересказу. Номер задачи берётся из `task.json`. 1. **`ad-pack.json`** — `schema_version:1`, `synthetic:true`, `task_id`, `authorship`, `input_sha256` для всех пяти файлов, `company`, `scope`, `status:"prepared_local_draft_not_imported"`, `currency`. `package.items` содержит исходные item_id, quantity, unit_price_rub и вычисленную line_total_rub; `package.total_rub` — сумма строк. Добавьте объяснение расчёта и источник. `claims` — не меньше пяти разных claim_id с текстом факта и точным полем источника. `groups` — group_id, title, query_ids, ad_ids, rationale. `ads` — ad_id, group_id, query_ids, headline, text, claim_ids, landing_url. На каждую исходную группу нужны два **самостоятельно написанных** объявления; учебные рамки длины заданы задачей. Каждое объявление показывает цену и сохраняет UTM из task.json, свой ad_id в utm_content и связанные query IDs через `_` в utm_term. `excluded_queries` содержит только исходные EXCLUDE: query_id, query, source_intent, decision, reason. 2. **`handoff.md`** — связный документ для маркетолога: что подготовлено, почему запросы разделены, что проверить, ссылки на остальные три файла. Объясните связь объявления с посадочной и сумму; не ограничивайтесь списком имён файлов. 3. **`landing-facts.md`** — содержательный план первого экрана, предложения, расчёта, аудитории и следующего шага. Каждый существенный факт имеет источник; не добавляйте сроки, гарантии, отзывы или действующий контакт, которых нет во входе. 4. **`open-questions.md`** — вопросы перед реальным запуском с основанием и последствием. Неизвестное остаётся неизвестным. В JSON сохраните `launch_gate:"HOLD_MISSING_PARAMETERS"`. `unknowns`: advertising_budget, account_and_permissions, targeting_and_dates, tax_status, payment_terms, delivery_dates, buyer_details, seller_details, client_results, roi — **null для этого входа**. `external_operations`: campaign_import, moderation, ad_spend, landing_published, message_sent — false. Наличие документов не разрешает запуск. При изменении этих исходных условий нужна отдельная согласованная версия, не молчаливый перенос старого ответа. Если обязательная цена/состав/решение по запросу отсутствует или источники противоречат друг другу, сообщите `HOLD` с конкретным недостающим полем. Не создавайте заполненный ценник по догадке и не ставьте `done`. Смысловую сверку выполняют отдельно после сохранения первой попытки. Шаблон ниже не является выполненной проверкой и не заполняется автоматически моделью вместо проверяющего: ```json { "task_id": "FROM_TASK_JSON", "reviewer": "ACTUAL_REVIEWER", "reviewer_kind": "human_self_review", "decision": "PENDING", "input_sha256": {}, "output_sha256": {}, "criteria": { "scope_and_calculation": false, "queries_and_exclusions": false, "ad_claims_have_sources": false, "landing_matches_ads": false, "unknowns_and_launch_hold": false, "docs_meaning_and_links": false } } ``` После реального просмотра заполните точные pins и критерии. Решение `accepted_for_local_demo` означает только приёмку этого локального результата; оно не является согласованием бюджета, платформенной модерацией или официальной оценкой ученика.