ЗОРЯ

Головна/Завдання/Частина 2/Огляд

Зоря. Частина 2. Перший локальний бій

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

1Що видано

Друга частина дає гру цілком: правила світу, рушій, протокол і SDK, щоб ви написали бота і зіграли ним повний пакет у себе на машині.

ДокументЩо в ньому
01-rules.mdправила гри, як їх виконує рушій; числа світу - додаток А
02-path.mdшлях учасника: від токена реєстру до зіграного пакета, чек-лист
03-sdk.mdSDK: заготовка бота, клієнт проводу, довідник правил, суперники, реплей
04-protocol.mdпровід: кадри, присяга, дедлайни, повернення після обриву, журнал
05-nakaz.mdнаказ: формат грамоти, словник, лінтер, зразки
06-local-pack.mdлокальний пакет: команда, склади, запис, час на такт

Пакети npm у приватному реєстрі конкурсу, усі під ліцензією MIT:

ПакетЩо в ньому
@zoria/engineрушій світу; вихідний код ядра для читання - у source/
@zoria/protocolсхема проводу protocol.cddl, кодек, типи, тарифи
@zoria/sdkSDK і шість зразків грамот
@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-4004npm 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-06nakaz.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Як почати

shell
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).