ЗОРЯ

Головна/Завдання/Частина 4/Передстартовий прогін

Передстартовий прогін: ворота допуску

опубліковано 21.09

1Що це

1.1

Передстартовий прогін - машинна перевірка здачі: ми беремо зафіксований коміт, збираємо стек, піднімаємо його на машині учасника і дивимося, чи сідає він за стіл. Зелений вердикт - допуск; червоний - одна перездача у вікні (01-submit.md, розділ 3).

1.2

Прогін не ставить балів і не пробує вашу стратегію: партія проби коротка, суперники - грамоти-заглушки, жереб службовий. Перевіряється провід, а не гра.

1.3

Зелений CI у вашому репозиторії нічого не означає: ворота - це наш прогін і тільки він.

2Ступені

Ступені йдуть по порядку; перший, що впав, зупиняє решту. Імена ступенів приходять у вердикт полем name, причина - полем detail.

#СтупіньЩо перевіряєЧаста причина провалу
1repoдзеркало знялося, гілка за замовчуванням є, коміт зафіксовано, розмір дзеркала в ліміті, дерево вивантаженорепозиторій недоступний, гілки немає, дзеркало більше за 200 МіБ
2secretsсканер витоків на дереві та історії комітуключ, токен або пароль в історії
3nakazbot/nakaz.yaml на місці і проходить три ступені лінтераграмоти немає, крок не зі словника, селектор не зі словника
4langzaria.bot запускає node з файлом із каталогу бота; у каталозі тільки TS і JSкоманда запуску не node, вихідний код іншою мовою
5stackcompose.yaml читається, ролі на місці, правила машини дотриманодві голови, bind-том, include, контекст збірки поза репозиторієм
6buildобрази зібралися з коміту, замок записанозбірка не вклалася у 20 хвилин, немає lockfile, помилка компіляції
7upвідкат до знімка підняв стексервіс падає на старті, чекає того, чого немає
8helloголова присягнула вузлу в лобі і вела слот самабот не встиг до дедлайну лобі, слот вела грамота, кадр не за схемою
9health/health відповідає до партії і 200 після неїручка слухає 127.0.0.1, а не 0.0.0.0; після партії відповідає 503
10metrics/metrics віддає п'ять канонних лічильниківлічильник перейменовано або він зник
11hq-bundleштаб віддає / сторінкою text/html і всі її місцеві ресурси 200збірка штабу не потрапила в образ, шлях до ресурсу битий

Ступінь hq-bundle іде, тільки якщо в стеку є роль zaria.hq. Штаб для допуску не обов'язковий: не оголосили - ступеня просто немає, вердикт від цього червоним не стане, і до партій вас допустять. Ціна відсутності штабу - нуль із двадцяти балів його осі на прийманні (частина 3). Ворота допуску і бали - різні речі.

3Партія проби

3.1

Проба - справжня коротка партія на тому самому шлюзі, з тією самою печаткою і тією самою адресою вузла, що в залікового пакета. Два сусідні місця ведуть грамоти-заглушки: запис партії вимагає протокольних ботів у всіх трьох слотах, а судимо ми одного учасника.

3.2

Голова мусить присягнути за час лобі і вести слот сама. Епізоди наказу в пробі припустимі, але їхнє число друкується в detail: слот, який усю пробу вела грамота, - це провал ступеня hello.

3.3

Перед пробою машина відкочується до знімка - так само, як перед кожним прогоном залікового пакета. Прогін міряє і час відкату: він друкується в detail ступеня up.

4Вердикт

4.1

Вердикт приходить у кабінет (01-submit.md, розділ 4):

JSON
{
  "sha": "9f2c1b...",
  "digest": "sha256:...",
  "at": "2026-10-10T18:04:11Z",
  "ok": false,
  "checks": [
    { "name": "repo",   "ok": true,  "detail": "mirror synced, main@9f2c1b0e4a77, 12.4 MiB" },
    { "name": "lang",   "ok": true,  "detail": "zaria.bot: node dist/main.js, directory bot, no foreign sources" },
    { "name": "stack",  "ok": true,  "detail": "services 2: head head, control head:7801, hq hq:8080" },
    { "name": "hello",  "ok": false, "detail": "no oath by the lobby deadline: the nakaz ran the slot" }
  ]
}
4.2

Порожні значення в незібраного стека чесні й упізнавані: SHA із сорока нулів означає "коміту немає", sha256 порожнього входу - "стек не зібрано".

4.3

Вердикт з ok: true може нести перевірку, що впала: означає, конвеєр визнав її такою, що не замикає. Що замикає, а що ні, видно з поля ok вердикту, а не з кольору окремого рядка.

4.4

Сперечатися з вердиктом можна апеляцією на рядок: номер прогону, ім'я ступеня і його detail (scoring.md, 14). Розбіжність нашого повторного прогону з початковим тлумачиться на вашу користь.

5Прогін у себе

shell
npx zaria-kit preflight

Команда жене ті самі одинадцять ступенів на вашій машині: збирає стек із робочого дерева (або з коміту з прапорцем --sha), піднімає його, грає пробу і друкує такий самий список перевірок.

ПрапорецьЗа замовчуваннямЩо змінює
--sha КОМІТробоче деревощо збирати: дерево чи коміт
--ticks N60довжина партії проби
--keepвимк.не гасити стек після прогону: можна зайти руками
--json ФАЙЛpreflight.jsonкуди писати вердикт
--lang uk\|enzaria.langмова виводу

Потрібні Docker із compose v2 і Node.js 24. Секрет реєстру прогін бере зі змінної ZORIA_NPM_AUTH вашого оточення і передає його збірці так само, як це робимо ми (02-build.md, розділ 7); в образ він не потрапляє.

Відмінності від нашого прогону - машина і мережа: у нас стек стоїть на своїй машині з відкатом до знімка, у вас - на вашій. Ступені, коди і причини ті самі.

6Тренувальний день 07.10

6.1

Коміт фіксується 06.10 о 21:00 UTC, прогін іде вранці 07.10, далі ваша голова грає один пакет проти двох ботів організаторів. Усе це поза заліком: частки не рахуються, балів немає.

6.2

У кабінет приходить вердикт прогону і запис пакета: ті самі файли, що в залікового пакета (part3/03-record.md, розділ 6). Це перша можливість побачити свій штаб на своєму справжньому записі і свої лічильники каналу на справжньому вузлі.

6.3

Провал тренувального дня нічим не загрожує: він не ворота, а репетиція. Ворота - прогін 10.10.

6.4

Суперники тренувального дня - голови архетипів SDK, ті самі, що в локальному пакеті (part2/06-local-pack.md, розділ 3). Які саме - оголосимо новиною напередодні.