Головна/Завдання/Частина 2/Огляд
Зоря. Частина 2. Перший локальний бій
1Що видано
Друга частина дає гру цілком: правила світу, рушій, протокол і SDK, щоб ви написали бота і зіграли ним повний пакет у себе на машині.
| Документ | Що в ньому |
|---|---|
01-rules.md | правила гри, як їх виконує рушій; числа світу - додаток А |
02-path.md | шлях учасника: від токена реєстру до зіграного пакета, чек-лист |
03-sdk.md | SDK: заготовка бота, клієнт проводу, довідник правил, суперники, реплей |
04-protocol.md | провід: кадри, присяга, дедлайни, повернення після обриву, журнал |
05-nakaz.md | наказ: формат грамоти, словник, лінтер, зразки |
06-local-pack.md | локальний пакет: команда, склади, запис, час на такт |
Пакети npm у приватному реєстрі конкурсу, усі під ліцензією MIT:
| Пакет | Що в ньому |
|---|---|
@zoria/engine | рушій світу; вихідний код ядра для читання - у source/ |
@zoria/protocol | схема проводу protocol.cddl, кодек, типи, тарифи |
@zoria/sdk | SDK і шість зразків грамот |
@zoria/nakaz | формат, словник і лінтер наказу |
@zoria/server, @zoria/tournament | вузол і турнір: на них грає локальний пакет |
@zoria/kit | шаблон бота, команда zaria-kit, документи частини 2, еталонний запис пакета |
Документи лежать у пакеті @zoria/kit двома мовами: npx zaria-kit docs у каталозі бота після npm install друкує шлях (docs/uk і docs/en).
2Що має працювати до кінця частини 2
| ID | Вимога | Як перевірити |
|---|---|---|
| P2-01 | Бот лежить у вашому репозиторії з частини 1 і збирається командами з його README | Новий checkout, npm ci, npm run build |
| P2-02 | Бот присягає вузлу за ZARIA_URL і ZARIA_TOKEN і грає партію до кінця без закриттів 4001-4004 | npm run play -- --fast: у pack.json немає absent на вашому місці, бот друкує кінець партії end |
| P2-03 | Бот сам рве провід, якщо хеш рушія вузла не збігається з очікуваним | npm run play -- --fast --ticks 60 --bot "ZARIA_ENGINE=<64 знаки a> node dist/main.js": бот не входить у жодну партію і друкує причину, вузол пише "без присяги" |
| P2-04 | Бот сам веде слот: відповідає вчасно і подає прийняту команду хоча б раз на 6 тактів | npm run play у темпі 500 мс: немає рядків "ваш слот вів наказ" |
| P2-05 | Бот пише щоденник віри у файл ZARIA_BELIEF: рядок NDJSON на такт у формі BeliefFrame | Після пакета belief-1.ndjson ... belief-3.ndjson непорожні, рядок розбирається як BeliefFrame |
| P2-06 | nakaz.yaml лежить у каталозі бота і проходить три ступені лінтера | npm run lint:nakaz завершується з кодом 0 |
| P2-07 | Секрету реєстру немає в репозиторії | В історії репозиторію немає значень token і auth з відповіді hub; .npmrc містить лише посилання ${ZORIA_NPM_AUTH} |
| P2-08 | Бота написано на TypeScript або JavaScript, і він працює в Node.js 24 або новішому, як шаблон | Вихідний код бота - .ts, .js, .mjs, .cjs; поле zaria.bot у package.json запускає бота командою node |
Шаблон бота (npx @zoria/kit init bot) виконує P2-01, P2-02, P2-03, P2-05, P2-06 і P2-08 з першої хвилини. P2-04 - робота вашої стратегії: заглушка шаблону мовчить, коли їй нема чого скомандувати.
Мова бота - TypeScript або JavaScript, рантайм - Node.js 24 або новіший, як у шаблоні (P2-08, 01-rules.md, 3.1). Перевірки коду в оцінюванні працюють лише з TypeScript і JavaScript, і бот іншою мовою не проходить ворота допуску (частина 4). Власного клієнта проводу замість connectBot писати можна, тими самими мовами. Команду запуску бота для npm run play задає поле zaria.bot у package.json каталогу бота.
ШІ-інструменти під час роботи над ботом і наказом дозволені.
3Як почати
curl -fsS -H "Authorization: Bearer $ZORIA_HUB_TOKEN" https://zoria.net/api/v1/me/registry-token > ~/.zoria-registry.json
export ZORIA_NPM_AUTH=$(node -p "require(process.env.HOME + '/.zoria-registry.json').auth")
node -p "require(process.env.HOME + '/.zoria-registry.json').npmrc" > .npmrc
npx @zoria/kit init bot
cd bot && npm install
npm run play -- --fast$ZORIA_HUB_TOKEN - свіжий токен входу в hub: вхід діє добу. Прострочений токен - curl завершується помилкою 401, і далі нічого не працює: увійдіть знову і повторіть. Пояснення до кожного кроку - 02-path.md.
4Параметри випуску
| Параметр | Значення |
|---|---|
| Видача частини 2 | понеділок, 28.09 |
| Реєстр пакетів | https://npm.zoria.net/ |
| Доступ до реєстру | GET /api/v1/me/registry-token hub: {registry, scope, username, token, auth, npmrc}; лише учасникам із підтвердженим репозиторієм, інакше 403 registry-not-eligible |
| Секрет реєстру | змінна середовища ZORIA_NPM_AUTH = поле auth; .npmrc містить лише посилання на неї |
| Версія пакетів | 1.1.4 |
| Рушій | 264a77c2a5405955f5aba04be240325d65cfe5d25269ae2f7c6a9fc7f4ff0e26 |
| Провід | PROTOCOL_V 8 |
| Зсуви світу | оголошуються заздалегідь і виходять новою версією пакетів (npm update); дати - у календарі конкурсу |
| Ліцензія пакетів | MIT |
Мова шаблону і команди zaria-kit | українська за замовчуванням; --lang en або ZARIA_LANG=en - англійська |
5Що не входить у частину 2
- Подання бота й наказу в залікові партії, службовий контракт бота (здоров'я, метрики, зміна пресета), передстартовий прогін - частина 4.
- Штаб і переглядач записів партій - частина 3. У частині 2 запис читають через
pack.json, журнали іzaria-kit replay.
6Питання і помилки
Питання щодо правил і повідомлення про збої - у публічний канал питань конкурсу, особисте - тим самим каналом, яким подавали заявку (див. FAQ). Помилку в правилах називайте пунктом (01-rules.md, 9.3) і хешем рушія: текст, який розходиться з рушієм, виправляють у тексті (01-rules.md, 1.2).