ЗОРЯ

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

Зоря. Частина 3. Ігровий штаб

оновлено 06.10

1Що видано

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

ДокументЩо в ньому
01-hq-contract.mdконтракт штабу: бандл без мережі, господар показу window.ZARIA_HQ, якорі й органи, режим трансляції
02-hq-tasks.mdдоповнення 1 до оцінки: 20 задач драйвера, бюджети, замір кадру, звіт
03-record.mdзапис пакета: файли, формати, як із них рахуються правда, віра, байти і відмови
КомандаЩо робить
npx zaria-kit init hqзаготовка штабу в каталог hq: збірка в один файл, господар показу, якорі з контракту
npx zaria-kit hq-checkдрайвер приймання на вашій машині: ті самі 20 задач і той самий замір кадру, що й у нас
npx zaria-kit recordsеталонний запис, пара пакетів пресетів і бандл нашого еталона в каталог records

Еталон нашого штабу їде зібраним бандлом (records/hq-ref.html): він потрібен, щоб порівняти кадр свого штабу з нашим на одній машині. Вихідного коду еталона немає і не буде - штаб пишете ви, а не переносите (розділ 6).

2Що має працювати до кінця частини 3

IDВимогаЯк перевірити
P3-01Штаб лежить у вашому репозиторії з частини 1 і виріс із клієнта мережі; каталог штабу оголошено полем zaria.hq у своєму package.json - це шлях до каталогу збіркиnpx zaria-kit preflight: каталог штабу знайдено рівно один
P3-02Штаб збирається з коміта командами README: npm ci і npm run build; на виході - каталог з index.htmlЗбірка на чистій машині без вашого node_modules
P3-03Зібраний штаб самодостатній: index.html несе код, стилі, шрифти і картинки всередині себе, і після відкриття не робить жодного мережевого запитуzaria-kit hq-check: сторінка відкривається в непрозорому джерелі під connect-src 'none', будь-який запит назовні - провал
P3-04Дані штаб отримує від господаря показу window.ZARIA_HQ (01-hq-contract.md): запис, потік ефіру, відповідь промоутуzaria-kit hq-check подає запис тільки так
P3-05Якорі значень і органи керування з контракту стоять на місці й відповідають у бюджеті20 задач драйвера
P3-06Ш1: штаб показує правду і віру бота на вибраному такті, їхню розбіжність і мовчання голок за віроюЗадачі Ш1-1 ... Ш1-5
P3-07Ш2: перехід на будь-який такт будь-якої партії пакета, вперед і назад, у бюджеті відгукуЗадачі Ш2-1 ... Ш2-4
P3-08Ш3: байти, команди і відмови за тактами, з причиною відмовиЗадачі Ш3-1 ... Ш3-4
P3-09Ш4: порівняння двох записів з різними пресетами і заявка промоуту вибраногоЗадачі Ш4-1 ... Ш4-4
P3-10Ш5: ефірний режим - штаб іде за потоком і не відстає більше ніж на 2 тактиЗадачі Ш5-1 ... Ш5-3
P3-11За прогін драйвера штаб не кидає необроблених винятків і не пише помилок у консольЗбір консолі драйвером: будь-який червоний рядок - провал прогону
P3-12Штаб відкривається в режимі показу: той самий бандл під нашим потоком, у пісочниці показу (01-hq-contract.md, розділ 6)zaria-kit hq-check --broadcast

Заготовка (npx zaria-kit init hq) виконує P3-01 ... P3-04 і P3-11 з першої хвилини: вона відкриває еталонний запис, показує зал, шкалу тактів і порожні панелі з усіма якорями контракту, а збирається в один index.html без збирача. Із двадцяти задач вона розв'язує одну - Ш4-4: заявка промоуту і показ відповіді, що прийшла, це контракт господаря, а не можливість штабу. Інші дев'ятнадцять - ваша робота: карта, правда, віра, канал, порівняння і ефір.

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

3Як проходить приймання

  1. Ми збираємо ваш штаб із коміта фінальної здачі (part4/02-build.md).
  2. Драйвер відкриває бандл у нашій сторінці-господарі й подає еталонний запис через window.ZARIA_HQ.
  3. Драйвер розв'язує 20 задач: ставить значення в орган, чекає якір, звіряє відповідь із ключем. Ключ рахує рушій за тим самим записом - сперечатися можна тільки із записом.
  4. Драйвер міряє кадр на сценарії показу і порівнює з нашим еталоном, прогнаним на тій самій машині в тому самому прогоні.
  5. Бали: одна розв'язана задача - один бал можливості. Верхній щабель можливості (5 у Ш1, 4 у Ш2-Ш4, 3 у Ш5) дається, тільки якщо розв'язано всі її задачі і кадр не гірший за еталонний (scoring.md, 9.2).

Задачі йдуть поспіль і спираються одна на одну: Ш1-2 питає про ту саму соту, що й Ш1-1, Ш3-2 - про той самий такт, що й Ш3-1. Це не поблажка, а прямий наслідок того, що драйвер працює органами: він не перезавантажує показ між задачами і не скидає його стан.

Людини в прийманні немає. Звіт драйвера машинозчитуваний: яка задача, яка відповідь, скільки мілісекунд, який ключ. Той самий звіт ви отримуєте в себе командою zaria-kit hq-check.

Параметри задач - такти, соти, номери команд - беруться жеребом. Наш жереб закритий до прогону, ваш вибирається прапорцем --seed: задачі ті самі, числа інші. Тому відповіді не можна вписати в код заздалегідь, а полагодити штаб можна (02-hq-tasks.md, 2.2).

4Приймання штабу і передстартовий прогін - різні речі

Передстартовий прогін (part4/03-preflight.md) перевіряє, що штаб узагалі зібрався і віддає сторінку: ворота допуску, а не бали. Задачі і кадр міряють один раз, за фінальною здачею (scoring.md, 6.4, 9.1).

5Де брати записи

  • Свої локальні пакети: npm run play пише запис у records (part2/06-local-pack.md).
  • Еталонний запис і пара пакетів пресетів: npx zaria-kit records.
  • Свої залікові партії: записи пакета приходять у кабінет, щойно пакет закрито (03-record.md, розділ 6). Журнали чужих пакетів відкриваються всім після кінця кола, щоденники віри - лише власні.

6Еталонний штаб: що видається і що ні

ЩоЇде вамНавіщо
Зібраний бандл еталона records/hq-ref.htmlтакпланка кадру: ганяти свій штаб і наш в одному прогоні драйвера на своїй машині
Драйвер приймання zaria-kit hq-checkтакті самі двадцять задач і той самий замір, що й у нас
Еталонний запис і пара пакетів пресетівтакматеріал задач
Числа еталона на нашій машинітакорієнтир: 95-й перцентиль і найгірший кадр (02-hq-tasks.md, 4.3)
Заготовка zaria-kit init hqтак, порожнягосподар показу, якорі і шкала тактів; можливості Ш1-Ш5 не реалізовані, крім Ш4-4
Вихідний код еталонаніштаб пишете ви; вихідний код перетворив би Ш1-Ш3 на перенесення чужого коду

Бандл еталона - не зразок смаку і не розмітка для копіювання: він задає тільки швидкість. Вигляд штабу вільний, драйвер читає якорі (scoring.md, 9.2).

7Що не входить у частину 3

  • Здача, збірка стека, службовий контракт бота і передстартовий прогін - частина 4.
  • Керування ботом зі штабу під час залікової партії. Людина в партію не втручається (scoring.md, 1); єдина заявка, що йде зі штабу, - промоут пресета, і в заліковій партії він відхиляється заморожуванням (part4/04-service.md).
  • Показ чужих штабів і чужих записів.

8Питання учасників

Чи обов'язковий React? Ні. Клієнт частини 1 - React і TypeScript (02-part1.md, P1-08), штаб росте з нього, але чим малювати карту - полотном, SVG чи таблицею - ваша справа. Драйвер читає якорі, а не розмітку.

Чи можна малювати карту не картою? Можна. Задачі питають значення, а не вигляд; п'ять екранів, три вкладки чи одне полотно - вирішуєте ви (scoring.md, 9.2).

Що як штаб уміє більше, ніж питає драйвер? Можливість поза списком Ш1-Ш5 дає дод. бал, а не бал штабу: опишіть сценарій у README (scoring.md, 9.4, 11.2).

Мій штаб ходить у мій бекенд - це можна? У кабінеті - можна, у показі - ні: зібраний бандл відкривається під connect-src 'none' і мусить працювати без мережі (P3-03).

Де взяти правду світу, якщо в записі тільки команди? Правду рахує рушій: openJournal з @zoria/sdk проганяє журнал і віддає світ на будь-якому такті (03-record.md, розділ 3).

Щоденник віри пише мій бот - а якщо він не пише? Тоді Ш1 нема чим показувати: віра береться зі щоденника (вимога P2-05, part2/00-part2.md; форма - part2/03-sdk.md, розділ 8). В еталонному записі щоденник є.

Скільки разів можна ганяти zaria-kit hq-check? Скільки завгодно: це ваш прогін на вашій машині. У залік іде наш прогін за фінальною здачею.