Головна/Завдання/Частина 3/Огляд
Зоря. Частина 3. Ігровий штаб
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Як проходить приймання
- Ми збираємо ваш штаб із коміта фінальної здачі (
part4/02-build.md). - Драйвер відкриває бандл у нашій сторінці-господарі й подає еталонний запис через
window.ZARIA_HQ. - Драйвер розв'язує 20 задач: ставить значення в орган, чекає якір, звіряє відповідь із ключем. Ключ рахує рушій за тим самим записом - сперечатися можна тільки із записом.
- Драйвер міряє кадр на сценарії показу і порівнює з нашим еталоном, прогнаним на тій самій машині в тому самому прогоні.
- Бали: одна розв'язана задача - один бал можливості. Верхній щабель можливості (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? Скільки завгодно: це ваш прогін на вашій машині. У залік іде наш прогін за фінальною здачею.