Етап 13 · Handoff

Хендоф

Пакет передається не тим, що все лежить у репозиторії, а тим, що людина, яка отримала посилання, знає, з чого почати, чому кожен екран існує двічі, яка тема головна і що станеться на порожньому списку. Ця сторінка веде до відповідей, а не переказує їх.

02

Межа пакета

Це клікабельний продукт, а не застосунок, і плутанина тут коштує тижня.

Що це означає для першої задачі. Новий екран не «додається в роутер»: він лягає плоско в design/, кожен його стан окремим файлом, і реєструється рядком у design/_nav.js. Посилання на екран, якого немає в реєстрі, автоматично переписується назад у сіре - це не баг, це uivFixLinks().
03

Яка тема головна

Світла. Вона живе в голому :root; темна це блок [data-theme="dark"], який перевизначає лише семантичні ролі і жодного примітива. Ролей 98, і в кожної є обидві половини - роль без пари не існує з першого рядка етапу 08.

Перевіряється це не оком: node tools/theme.mjs знімає обчислений стиль у двох темах і рахує контраст за формулою WCAG з порогами за поверхнею.

04

Маршрут по репозиторію

Від кореня до будь-якого артефакту хендофу - не більше двох кліків. Панель ліворуч на будь-якій сторінці це реєстр роадмепу, і вона одна на весь проєкт.

Чотири документи хендофу це .md, і посилання ведуть просто на них. Локально і на Pages вони відкриються як текст, на GitHub - зверстаними. Це навмисно: файл, з якого читають, і файл, який перевіряє node tools/handoff.mjs, мусять бути одним файлом, інакше пакет знову має дві редакції одного.

ПитанняКуди
що продукт РОБИТЬ, крок за крокомhandoff/docs/behaviour.md
з чого зібраний екран, і що поїде від зміни токенаhandoff/docs/map.md
що з доступності підтверджено, а що боргhandoff/docs/a11y.md
як додати фічуhandoff/docs/one-shot.md
що було незрозуміло чужому читачевіhandoff/docs/onboarding-gaps.md
чому будь-що з наведеного саме такеdocs/decisions.md
правила, які діють у наступній сесіїCLAUDE.md · design/system/CLAUDE.md
чим перевірятиtools/README.md
Чому кожен екран існує двічі. wireframes/ це сірий прототип етапу 04: структура, текст і стани. Він заморожений з етапу 05 і володіє складом екрана. design/ це та сама розмітка з кольоровим шаром і володіє виглядом. Знайдена в сірому помилка називається вголос і лагодиться в кольоровій копії, ніколи вгору по ланцюгу. Це історія процесу - і водночас рантайм, див. розділ 02.
05

Поведінка

Екрани показують кожен стан; вони не кажуть, що між ними рухається, що стається на гілці, якої ніхто не хоче, і яка з гілок глухий кут навмисно. behaviour.md це 152 рядки специфікації, і кожен називає джерело: файл екрана, вузол флоу або вузол IA. Джерел рівно три, четвертого немає.

06

Карта

map.md знято з корпусу, а не пригадано: екран -> зона -> компонент -> токени, і зворотний список інверсією тих самих даних. Головне питання, на яке він відповідає, - «якщо я зміню цей токен, що поїде».

07

Доступність

a11y.md нічого не вводить: усі правила ухвалені на етапах 08-11. Чого бракувало - одного місця, яке каже, що з них істинне сьогодні і якою командою. 26 рядків: 18 підтверджено, 8 боргів.

Найбільші боргиСьогодніКоманда
текстовий зум 200%142 з 343 течуть убік на 1280accept.mjs --text200
драбина заголовків пропускає щабель97 зі 141, одна причинаheadings.mjs
чорнило проти свого тла12 форм. Було 37, з них 25 - одна пара Signal Orange, закрита рішенням власника 25.08.2026theme.mjs
немає досяжного h135 зі 141headings.mjs

«Підтверджено» означає прогін сьогодні, а не пам'ять про етап, який писав правило. Рядок, для якого прилад назвати неможливо, «підтверджено» не отримує ніколи, і це перевіряє node tools/handoff.mjs.

08

Як додати фічу

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

Він веде до всіх трьох документів пакета, а не лише до системи й голосу: без behaviour.md нова гілка буде вигадана, без map.md токен буде взятий навмання, без a11y.md новий екран додасть до восьми боргів замість того, щоб їх не чіпати.

Що вже відомо і не зміниться: нове з'являється в системі першим, потім на екрані, ніколи навпаки. У файлі екрана заборонені @media, transition, animation, @keyframes, тег style, атрибут style, будь-який hex, будь-який px повз токен і клас, якого немає в системі. Але заборона стосується вигадування у файлі екрана, а не росту: чого бракує - спершу заводиться в системі повним набором із шести частин, і аж тоді ставиться на екран.

09

Хто ухвалює рішення після передачі

Обидва відкриті списки пакета адресовані людині, а не наступному етапу: етапу після цього немає. Без адресата перший же рядок із [?] зупиняє роботу, бо нема кому його поставити.

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

Особистого імені тут немає навмисно. Адресат це РОЛЬ, а не людина: роль переживає того, хто її обіймає, а сторінка з чиїмось ім'ям застаріває першого ж дня, коли роль переходить далі.

Що саме чекає на нього

КласСкількиДе лежить
числа, які потребують реальних данихвідсоток тарифу тренера, пороги лояльності, ставка нарахування, строк життя бонусівbacklog.md · sitemap.md
борги доступності8, у кожного число, яке має дійти до нуляa11y.md
питання поведінки без джерела6behaviour.md
мертві токени і компонент, що читає примітив4 + 1backlog.md
розбіжності всередині flows.md3onboarding-gaps.md

Зведений список один - розділ «Idle control» в onboarding-gaps.md тримає число рядків, скільки з них закрито і скільки адресовано власнику. Він і є тим єдиним місцем, якого бракувало.

Сьогодні таких рядків 12, і це число теж рахує node tools/handoff.mjs, а не рука. До 25.08.2026 тут стояло «11» - при списку з дванадцяти імен і тринадцяти рядках, що насправді називали власника. Число, яке нікому підтримувати, або прибирається, або дістає прилад; це дістало прилад.

10

Що свідомо не зроблено

Рішення, прочитане як діра, коштує стільки ж, скільки діра. Тому кожне з них назване і має причину.

Повний перелік із причинами - backlog.md і розділ «Backlog» у flows.md.

11

Було незрозуміло -> стало

Етап стоїть на читачеві з чистим контекстом, а не на уяві. Нижче - зведення класами, з колонкою «хто знайшов»: чотири незалежні набори, і кожен бачив те, чого не бачили решта.

Хто дивився, і скільки принесли

ХтоЩо читавЗнахідок
розкотка, 18 субагентів етапу 12кожен - документацію 08-11 під СВІЙ екран123 питання, зведені в 9 класів; 5 з них доїхали сюди
аудитор кроку 1, чистий контекстпродукт ЦІЛКОМ, із забороненими логами критики3 діри + 12 висновків, з них жодного «зрозумів неправильно»
кроки 2-6, приладивласні гейти пайплайну34 знахідки, і 20 з них - про самі прилади
два іспити кроку 7кожен будував фічу з one-shot.md, не знаючи репозиторію18 і 16 - та сама довжина, і це означає, що хендоф не завершений

Класи, а не список

КласСкількиПрикладСтало
Зелений лічильник, який не бачить свого класунайбільший клас етапудванадцять власних списків inventory.mjs не могли зробити його вихід червоним; карта покриття зелена, не бачачи чотирьох нових екранів; прилад фокуса ніколи не ходив темною темоювирази виходу переписані, питання дописані, і біля кожного названо, що зробило б його червоним
Одне число у трьох редакціях прози4 місцякількість компонентів: README казав 84, why.html 84, kit.html 93, на диску 94оголошений список місць, кожне переписується з таблиць, і питається в обидва боки
Правило в прозі без перевірки під ним4 правила«посилайся, не дублюй», «підтверджено означає прогін», «не більше двох кліків», арифметика самого журналучотири нові прилади: handoff.mjs, map.mjs, headings.mjs, clone-test.mjs
Документ, що описує продукт, якого вже немає6 місцьстенд описував ширину, знятої на 12.9; пакет казав, що фічі немає, а форма стоїть з етапу 08; ця сторінка називала фічу третім ім'ям і в переліку викресленоговиправлено в кожному, і причина названа: додавання застарює сусідів так само, як ремонт
Прилад, що працює лише на одній машині1motion-row.mjs ніс домашню теку автора константою чотири етапитест чистого клону - єдиний прилад, який читає репозиторій ЗЗОВНІ
Два документи, що суперечать один одному5 парE10 у двох IA-документах це дві різні фічі; job 3 проти Job 4; цикл споживання [?] проти числа на екраніназвано в behaviour.md і в беклозі; лікує власник, бо це рішення, а не друкарська помилка
Правило, яке неможливо виконати1«новий екран не має додавати до боргів доступності» - борг E2 пише футер замороженого рантайму, тож його успадковує кожен екран у мить створенняпереписано на виконанне: не додавати нової ПРИЧИНИ, і довести це виміром проти сусіда

Дві речі, яких прилади не дістали

Чотири поломки знайдено оком, коли всі гейти вже були зелені - ціна, що ламається між числом і знаком гривні на підлозі; скелетон, який обіцяє менше рядків, ніж віддає завантажений стан; назва товару в шість рядків; одна дія під двома іменами. Прилади це підлога, а не вердикт, і one-shot.md тепер каже це з цими чотирма як прикладом.

Детектор образів дав 3 попередження, і 2 з них зняті на перевірці: бічна кольорова смуга на врізці справді є характерним знаком, але в цьому проєкті вона вже мова - voice/voice.html носить її з етапу 05. Третє було справжнім: правило .stop не вживалось на сторінці жодного разу і знято.

Повний журнал із верифікацією кожного рядка - onboarding-gaps.md: 63 замовлення, 39 закрито, 24 відкрито, і ці три числа рахує node tools/handoff.mjs, бо в файлі, чия тема - «число, якого ніхто не підтримує», вони були набрані рукою і розійшлись.