# Стан роботи — 6 серпня 2026

**Почни з розділу «Де ми зараз» унизу** — там актуальний стан.
Розділи вище описують попередній етап (Level 2 «У що вірять християни»)
і лишені як довідка.

Знімок для відновлення після перезапуску термінала. Що зроблено, що працює,
що чекає рішення. Довгі відкладені питання — у `BACKLOG.md`, метод роботи — у
`.claude/agents/lesson-localizer.md`.

---

## Відновити роботу після перезапуску

```bash
cd /Users/pavlokulakovskiy/projects/BibleTime/interactive-pdf
.venv/bin/python editor/serve.py          # тільки цей комп'ютер
.venv/bin/python editor/serve.py --lan    # + інші комп'ютери в мережі
```
→ `http://127.0.0.1:8765/editor/regions.html`

**Доступ з іншого комп'ютера.** `--lan` слухає всі інтерфейси й **вмикає
токен**: сервер друкує готове посилання з `?token=…`, його й треба відкрити на
другій машині. Токен можна задати самому (`--token proba-2026`), але **лише
латиницею** — заголовки HTTP не переносять кирилицю, і з кириличним токеном
панель мовчки діставала б 401.

Запобіжники лишилися: заголовок `Host` перевіряється (приймаються тільки власні
адреси цієї машини, тож чужий сайт із браузера Редактора писати не зможе),
писати можна лише в `editor/` і лише під іменем `regions_p<NN>_<завдання>.json`.
Сама сторінка панелі й PNG віддаються без токена — захищене API, а не статика.

**Якщо панель показує «каталог не прочитано» і «файлів областей немає»** —
це не втрата даних, а 401: сторінку відкрито без токена. Панель тепер каже це
прямо й дає поле, куди токен можна вставити (без модальних вікон — вони
блокують автоматизацію). Раніше вона мовчки переходила в запасний режим, і
виглядало так, ніби зникли всі напрацювання.

Панель відкриється на потрібному уроці й наборі областей за адресою:
```
http://127.0.0.1:8765/editor/regions.html?png=page_Level2_UA_form_v07_p16_150dpi.png&json=regions_p16_q2_full.json
```

Сервер був запущений як PID 24659 — після перезапуску термінала його не буде,
просто підніми знову. Фонових агентів не лишилося, усі завершені.

**Запис екрана вже дозволено** — агент бачить Acrobat сам. Керує ним через
Apple Events (дозвіл теж є):

```bash
osascript -e 'tell application "Adobe Acrobat" to tell document "файл.pdf" \
  to do script "this.pageNum=0; this.zoom=400; this.scroll(348,684);"'
screencapture -x знімок.png
```

**Чого ще бракує:** дозволу «Доступність» для Terminal. Без нього агент не може
ані клікати, ані відкривати діалог Параметрів Acrobat — доводиться просити
тебе. Якщо колись знадобиться часто — Системні параметри → Конфіденційність і
безпека → Доступність → Terminal.

---

## Попередній етап: Level 2 «У що вірять християни»

Окремий позасерійний буклет на 24 сторінки — на ньому конвеєр і відпрацьовували.
До серії A1 стосунку не має.

**`forms/Level2_UA_form_v09.pdf`** — 821 віджет, 24 сторінки.

* 569 полів уроку (текст, клітинки, вибір відповіді, філворди, розмальовка
  контурних літер) + 252 клікабельні області малюнка на стор. 16;
* `NeedAppearances false`, без JavaScript, без кнопки submit;
* рендер побітово ідентичний v08 — у v09 лише виправлено 173 нульові потоки
  вигляду (гігієна, на вигляд не впливає).

Попередні версії лишаються поруч: v07 — перший з областями, v08 — після
правок у панелі.

---

## Що чекає на ТВОЮ перевірку

### 1. ~~Галочки Acrobat~~ — ЗАКРИТО, дефекту немає

Перевірено в Acrobat Pro DC 5 серпня. **Галочки — артефакт того, як ми самі
перевіряли, а не те, що побачить дитина.** Три досліди:

1. **Підсвітка ні до чого.** Увімкнув `app.runtimeHighlight` — жоден із шести
   варіантів галочок не дав. Заразом з'ясувалося, чому їх раніше «не було
   видно»: на цьому маку колір підсвітки стояв **білий** (`app
   .runtimeHighlightColor` = RGB 1,1,1). Із нормальним блакитним підсвітка
   лягає рівно по фігурі й виглядає добре.
2. **Галочки дає програмна зміна стану.** Коли позначаєш поле з консолі
   (`field.value = ...`), Acrobat **перегенеровує** вигляд із `/MK/CA`, а
   типовий підпис чекбокса — символ «4» ZapfDingbats, тобто галочка. Наш
   потік при цьому не малюється взагалі: замість фарби — галочка. Галочки
   лишалися й з **вимкненою** підсвіткою — саме це й показало, що гіпотеза
   була не про те.
3. **Справжній клік нічого не перегенеровує.** Ти клікнув по одязі — Acrobat
   зафарбував **усю деталь** нашим кольором, штрихи видно крізь фарбу,
   галочок нема. `saveAs` → у збереженому файлі `/AS /Yes`, `/V /Yes`, а потік
   `/AP/N/Yes` **побайтово той самий** (68 байтів, стенсил `/Im0`). Рендер
   збереженого файлу: сорочка синя, спідниця рожева — як задумано.

Отже конфігурація §3.2a лишається як є, міняти нічого не треба.

Із шести варіантів галочку прибирає лише **стор. 3 — `/MK <</CA ( )>>`
(пробіл)**; порожній рядок `()` Acrobat вважає «підпису немає, малюй типовий».
На нормальному шляху це нічого не змінює, але як **дешева страховка** на
випадок переглядача, що перегенеровує вигляд, варто додати: тоді замість
252 галочок буде просто нічого. Рішення за тобою — див. `BACKLOG.md` п. 9.

Файли досліду: `verify/acrobat_ticks_v01.pdf` (6 варіантів),
`verify/acrobat_ticks_preset_v01.pdf` (стан позначено у файлі, а не в Acrobat),
`verify/acrobat_ticks_clicked_saved.pdf` (збережено після справжнього кліку).

### 2. Помилка з фокусом у Chrome — другорядна

У вбудованому переглядачі Chrome клік по одній області перемикає **попередню**,
доки не клікнути по білому полю. На Android і в Acrobat усе працює.

Автоматичного стенда не буде: Chrome не приймає синтетичних кліків узагалі —
не реагують ані поля форми, ані власні кнопки переглядача. Тобто відтворити
може лише людина. Оскільки Chrome не є цільовим переглядачем, питання
відкладене.

---

## Що зроблено сьогодні

**Розмальовування малюнків доведено до робочого стану.** Ратифікована
конфігурація (деталі — §3.2a специфікації): адаптивне прямокутне розбиття
2 pt без перекриття, непрозора фарба, спільний растровий трафарет на область.
Повне покриття малюнка — 35 областей, 97 % площі, 252 віджети, +127 КБ.
Дрібні деталі (ремінці, пальці) пальцем на телефоні натискаються — перевірено.

**Панель редагування областей стала робочою.** Було: тільки обведення.
Стало: редагування точок контуру (перетягнути, вставити, прибрати), вибір
кліком по полотну з вибором найменшої області, робочий список із прокруткою,
перемикання всіх 24 сторінок, і головне — **збереження прямо на диск і
перезбірка PDF з панелі**. Цикл «поправив → Зберегти → Перезібрати →
перевірити» замкнено, ручних файлів немає.

**Модальні вікна прибрано** — вони блокували автоматизацію браузера
(агент застрягав, доки людина не натисне ОК).

---

## Карта файлів

| Файл | Що робить |
|---|---|
| `editor/serve.py` | сервер панелі: статика + запис JSON + перезбірка PDF. Слухає лише 127.0.0.1, пише лише в `editor/` і лише `regions_p<NN>_*.json` |
| `editor/regions.html` | сама панель, один самодостатній файл |
| `editor/make_page.py` | рендер сторінок PDF у PNG (`--all`, `--pages`) |
| `editor/regions_p16_q2_full.json` | **робочий** набір: 35 областей стор. 16 |
| `ua_build/art_apply.py` | JSON областей → PDF; зливає з наявними полями уроку |
| `ua_build/fields_detect.py` / `fields_build.py` | детектор полів уроку і вставка віджетів |
| `ua_build/build.py` / `translations.py` / `puzzles.py` / `qa.py` | переклад і верстка уроку (Скіли 1–2) |
| `verify/*` | прототипи й вимірювання: покриття, кліки, шов, варіанти |
| `ua_build/inventory.py` | витяг завдань із буклетів Bibletime (усі 5 рівнів) |
| `ua_build/inventory_types.py` | групування завдань за механікою + звіт |
| `INVENTORY.md` | **результат**: перепис усіх 180 буклетів і 18 механік |
| `~/projects/BibleTime/lessons/en` | 180 англійських оригіналів, 190 МБ |

Старі набори областей (`regions_p16_q2.json` — 11 областей,
`_draft.json` — 10) лишені для історії; панель типово бере **свіжіший**.

---

## Що зроблено ввечері

Закрито питання галочок (див. вище). Побічно з'ясовано метод, якого бракувало:
**стан кнопки не можна перевіряти програмною зміною значення** — Acrobat на це
перегенеровує вигляд і показує не те, що побачить дитина. Правильні способи —
справжній клік або `/AS` + `/V`, записані в сам файл. Записано в
`.claude/agents/lesson-localizer.md`, §3.6.

---

## Де ми зараз — 6 серпня, вечір

**Серія A1 пройдена наскрізь на всіх п'яти рівнях.**

| | Друк (`lessons/uk/print`) | Інтерактив (`lessons/uk/interactive`) |
|---|---|---|
| Level0_A1 | `_UA_v03.pdf` | `_UA_v01.pdf`, 36 полів |
| Level1_A1 | `_UA_v07.pdf` | `_UA_v01.pdf`, 81 поле |
| Level2_A1 | `_UA_v04.pdf` | `_UA_v01.pdf`, 196 полів |
| Level3_A1 | `_UA_v08.pdf` | `_UA_v01.pdf`, 152 поля |
| Level4_A1 | `_UA_v12.pdf` | `_UA_v02.pdf`, 252 поля |

Перебрендування на «Біблійну Годину» застосовано до всіх. Круговий тест полів
чистий на всіх п'яти. Латиниці поза брендом немає.

Метод оновлено — усе, що коштувало ітерацій, лежить у
`.claude/agents/lesson-localizer.md`: §2.4a (пʼять способів зіпсувати
сторінку), §2.6 (готові інструменти головоломок), §3.3 (пʼять правил
детектора), §3.7a (як дивитися в Acrobat). Робочий журнал серії — у
`STRUCTURE_A1.md`, перепис усієї програми — в `INVENTORY.md`.

---

## Наступний крок

Три варіанти, у порядку моєї рекомендації:

1. **Серія A2 усіх рівнів** — конвеєр налагоджений, має піти помітно швидше.
2. **Дочистити беклог**: перевірка боксів балів у `qa.py` (п. 7 у списку
   завдань), винести «клітинки з крапкою» в `puzzlekit`, вектор логотипа.
3. **Продуктові рішення**, які накопичилися: доля 419 невиконуваних завдань
   (беклог п. 1), акростихи з фото (двічі замінено на письмове завдання),
   контурні вірші рівня 0 в інтерактиві (зараз заливаються, а мали б
   обводитися).
