Перейти до змісту

Карта екранів: яке питання ставить кожен

Довідник по вікнах застосунку в браузері. Коротко для людини — «Як працювати».

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

екран питання «немає» означає
🐾 Огляд де я стою й куди воно рухається «у цьому просторі ще нічого немає» — і тоді екран стає онбордингом
🎯 Рід чиє прізвище шукаємо і в яких написаннях «рід ще не названо» — нормальний стан свіжої установки, а не поламка
🔎 Каталоги де це є в чужих довідниках «немає в тих каталогах, куди ми змогли зазирнути»
🗺 Газетир де документи мого СЕЛА «немає у встановлених довідниках»
🏛 Описи фондів що взагалі існує в архіві «в архіві не існує»
📚 Бібліотека що я маю на руках «ще не завантажено»
📥 Нові теки що лежить на диску й ще не стало справою «нових тек немає — усе описано або відкладено»
📜 Прогони чим і наскільки прочитано «цю справу ще не читали машиною»
🖼 Аркуші що це за папери «у цій теці нема чого показати»
📄 Гортач що саме прочитала машина «цієї сторінки в прогоні немає»
🔎 Пошук де в прочитаному моє прізвище залежить від сховища — див. канали пошуку
👁 Облік що я вже бачив оком «цього аркуша ще не переглядали»
🗃 Набори що в мене є для розмітки й трену «наборів немає» — нарізати перший із прогону
✍ Розмітка що на цій смужці написано насправді «у цьому режимі рядків не лишилось» — усі розмічені або порожні
📚 Канон що по роду встановлено й чим доведено «карток ще немає» — канон засівають з GEDCOM чи першою карткою (скіл keep-canon)
❓ Гіпотези що не доведено й який документ це розв'яже «карток гіпотез немає» — відкрите по роду ніде не записано
📝 Дослідження що вже перевірено, що ні і чому «у reports/ проєкту звітів ще немає»
🕓 Історія хто й коли міняв картку, як повернути «змін ще не збережено» або «історію не заведено» (nysh history setup)
☁ Хмара що крутиться на орендованих картах і скільки коштує «хмарних прогонів ще не було»
🤝 Супряга що віддати в пул, що взяти, що вже віддано «усе прочитане вже віддано» / «у пулі такого немає»

Три питання — правила інтерфейсу

Кожен екран і кожна дія відповідають людині на три питання. Це правила для того, хто міняє консоль, і пояснення для того, хто нею користується.

  1. Де я? — у Майстерні чи в роді, і чиї дані на екрані.
  2. Контекст названо словами: у верхній панелі («Рід · Рід Сидоруків» або «Майстерня · без проєкту»), у підписі блоку меню й у крихтах заголовка. Колір і знак роду лише підтримують напис.
  3. Кожен екран має шар (core.sections.LAYERS), і заголовок сторінки показує його міткою:

    шар мітка що означає
    own «належить «X»» висновки проєкту: канон, гіпотези, звіти, історія
    shared «спільне Майстерні» матеріал, читання, хмара, Супряга — бачать усі проєкти
    mixed «спільне · зріз для «X»» спільний матеріал із позначками для роду (бібліотека, пошук)
    service «сервіс машини» роботи й налаштування, а не дані дослідження
  4. Одна назва на екран — та сама в меню, крихтах і заголовку.

  5. Що тут головне? — заголовок і одне речення «навіщо» зверху; дія сторінки — кнопкою в заголовку («+ Завести справу» в Бібліотеці й Нових теках, «+ Новий проєкт» на Огляді Майстерні). Розширене лишається поруч і пам'ятає, чи його розкривали.
  6. Що станеться після дії? — дія, що пише, каже, куди ляже результат і з чиїм підписом. Прочитане лягає в спільний матеріал Майстерні, а рід — лише підпис замовника («Для кого»); вердикт і доказ — у проєкт.

Компоненти — одна родина кожного (app.css), щоб та сама думка мала той самий вигляд на кожному екрані:

  • кнопка — голий <button> = другорядна дія; модифікатори .primary (головна, і type=submit), .ghost, .danger, .sm, .on (вибране в перемикачі); посилання-кнопка — a.btn. Нового класу кнопки поза родиною не заводити: його ловить test_buttons_stay_in_one_family;
  • мітка — .tag з тоном .ok · .warn · .err · .info;
  • картка — одна поверхня для дверей, плиток, карток проєктів, інструментів, показників і коробок дашборда;
  • таблиця на телефоні стає картками: клас tbl-cards, підписи полів — із заголовків колонок.

Меню, верхня панель і вікна

Бічне меню ділиться за тим, де живуть дані (core.sections.NAV_GROUPS):

  • блок роду — підписаний назвою проєкту: Огляд роду · Канон · Гіпотези · Розбір кандидатів · Дослідження · Історія · Сайт родини · Профіль роду. Є лише в проєкті;
  • «Майстерня» — Огляд Майстерні. Є лише без проєкту;
  • «Спільне Майстерні» — групи Матеріали · Читання · Пошук · Супряга. Підпис групи веде на її перший екран, стрілка поруч лише розкриває;
  • «Сервіс» — Роботи · Експорт · Налаштування, Лабораторія.

Частини застосунку (секції) лишились вимикачами: екран вимкненої частини випадає зі своєї групи, а група без жодного екрана зникає. На вузькому екрані меню висувне (☰).

Верхня панель — лише те, що потрібне з будь-якого екрана:

  • контекст — у якому роді чи замовленні відкрита вкладка; клік дає перелік проєктів Майстерні й «+ Новий проєкт». Зміна роду лишає той самий екран (Бібліотека → Бібліотека); екран роду при переході в саму Майстерню веде на Огляд Майстерні. У просторі старого типу (без Майстерні) кнопки немає;
  • «Що зробити?» (клавіша /) — твоя ж nysh ops find: людина пише словами, консоль показує дії з кнопкою «Відкрити» туди, де їх роблять. Дія без екрана не зникає: поруч із командою для терміналу стоїть «Форма» — поля зібрано зі схеми операції (/api/ops), дія, що щось змінює, питає підтвердження, довга йде роботою;
  • «Працює N» — що зараз іде: читання, хмара, пошук; ховається, коли нічого;
  • профіль Супряги — ім'я в спільноті й скільки справ віддано та взято; меню веде у «Віддати», «Взяти», «Мої картки» й вікно профілю;
  • ⚙ — мова, тема й налаштування.

Вікна. Окрема сторінка — там, де людина працює довго (список, перегляд, розбір). Форма на одну дію відкривається вікном поверх поточного екрана: опис справи, новий проєкт, налаштування, профіль Супряги, доказ у канон, підтвердження (зупинити оренду, у хмару, віддати в Супрягу, повернути версію картки), деталь запису («що змінилось», журнал хмари, картка канону). Екран під вікном лишається, де був.

Майстерня без проєкту. Блоку роду в меню немає. Перехід на екран роду — за посиланням чи закладкою — показує вибір проєкту з поверненням на той самий екран, а не відмову «оберіть проєкт».

📚 Екрани роду (блок роду в меню)

У проєкті блок меню, підписаний назвою роду: Огляд роду · Канон · Гіпотези · Розбір кандидатів · Дослідження · Історія · Сайт родини · Профіль роду. Огляд роду — шапка роду, чотири показники-переходи (канон; гіпотези відкриті / чекають вердикту; непрошукане з прочитаного — cases.list з htr=read, searched=not_here; остання зміна), «Що вирішити» (canon.next) і «Що нового» (історія й звіти). Дашборд Майстерні згорнуто під «Стан Майстерні». Огляд Майстерні без проєкту починається з карток проєктів (особи, відкриті гіпотези).

🔴 Канон консоль показує й перевіряє, але не править. Картки веде агент або людина у файлі. «Додати доказ» у картці й «Наш → у канон» у Розборі роблять лише механічне: кроп рядка (text.crop) → сірий JPEG у стор доказів (evidence.add) → готове доручення агентові з шляхом доказу, справою, сканом, рядком і цитатою. Факт у картку вносить агент і перевіряє nysh canon check.

Гіпотези: лічильники open / awaiting / closed і перелік у порядку рішень; у вікні гіпотези — кандидати з кропами, «На звірку» віддає їх у Розбір. Вердикт ставить людина там, а не на екрані гіпотез.

Історія: журнал (history.log, файли — від кореня проєкту), «Що змінилось» полями «було → стало» (history.diff), «Повернути» — лише після підтвердження, що називає наслідок. Там, де git веде людина, замість перемикача автозбереження стоїть «коміти ведете ви».

Хмара (група «Читання»): зведення витрат і живих заходів, «Зупинити оренду» з підтвердженням. «У хмару» на екрані «Читання» спершу рахує кошторис (cloud.go без run — сухий прогін, нічого не орендується); оренда йде лише після «так», а понад стелю автозапуску — з confirm. Без грошей на рахунку оренди кнопки запуску немає.

Супряга: «Віддати» — прочитане й не віддане з галочками, пачка йде роботою (share.push); приватний проєкт відмовляє сама операція, і причину видно. «Взяти» — пошук у каталозі пулу, справа завантажується лише після підтвердження. «Мої картки» — журнал обміну й картка справи.

🐾 Огляд, Стан Майстерні, Проєкти

Огляд відповідає на «що робити далі», а не на «скільки всього»:

  • простір порожній (реєстру немає або в ньому жодної справи) — три двері: «у мене є скани», «не знаю, де шукати», «перевірити цю машину». Людині, яка щойно поставила застосунок, потрібні входи, а не таблиця нулів.
  • Огляд Майстерні — «Продовжити дослідження» (картки проєктів, «Усі проєкти»), чекліст «З чого почати» (лише поки не зелений), головні інструменти (Запустити читання, Бібліотека справ, Завести справу, Новий проєкт), плитки-показники зі спарклайном і останні прогони.
  • Огляд роду — показники роду, «Що вирішити», «Що нового». Стану Майстерні під ним немає.
  • Стан Майстерні (меню «Сервіс») — дашборд: плитки, поступ читання й пошуку смугами, розбір канону (у проєкті), прогони за рушіями й моделями, розрізи матеріалу за архівами й повітами, крива росту в часі, частини застосунку, перевірка машини.
  • Проєкти (блок «Майстерня») — картки всіх проєктів, архівні окремо. Простір старого типу (без Майстерні) лишається з повним дашбордом на Огляді.

Кожен блок гейтиться секцією: при вимкненому «Читанні» блок прогонів зникає, а не показує нулі — нуль прочитаних сторінок там, де читання вимкнено, означав би «нічого не прочитано» замість «питання не стояло».

Час у дашборді — це ДВІ різні осі

Плутати їх дорого, тому вони й намальовані по-різному:

  • сходинки («У часі») — дні, коли ми про щось дізнались. Джерело — data/derived/history.jsonl (core.history), і він записує спостереження, а не кожну зміну: дірка в лінії — це дні без спостережень. Ліва частина кривої — пунктир: вона відновлена з міток на диску (мети прогонів, дати заміток ока, git-історія канону), тобто реконструкція, а не замір.
  • стовпчики («Факти за десятиліттями подій») — роки самих подій у каноні. Це відповідь на «який період роду вже описано», і до темпу роботи вона стосунку не має.

🎯 Рід — єдине, чого застосунок не може вгадати

Прізвище, парадигма й написання по орфографіях приходять від ЛЮДИНИ. Вивести їх нема з чого: рос. «Лищин» → укр. «Ліщин» міняє першу «и», але не «и» в закінченні, і позиція залежить від історії слова, а не від правила. Вгадана основа мовчки викидає половину написань із пошуку — і нуль після цього виглядає як відповідь.

⚠ Чого профіль НЕ робить: не підставляє чуже прізвище замість вашого. q у пошуку обов'язкове, дефолтного прізвища в пакеті немає ніде. Ціна відсутнього профілю тихіша: усі написання доводиться пригадувати самому, а рушій калічить саме середину слова.

🔴 Форма знає п'ять полів, файл — одинадцять. Конфузери, зниження рангу, рецепт синтетики й якорі калібруються замірами на власному матеріалі, тож живуть текстом під «весь файл». І тому ж форма відмовляється правити профіль, у якому вона зачепила б щось поза цими п'ятьма полями або коментарі поруч із ними: у коментарях там і лежать заміри, а дамп їх не переносить — файл лишився б валідним, і втрата була б тихою.

Три реєстри й один ключ

Три з цих екранів — реєстри, і всі три тримаються на одному ключі архів/фонд/опис/справа (наприклад DAHMO/315/1/8433):

🏛 Описи фондів     що існує в архіві      12 822 справи ф.315
        │                                   рядок опису
        │ ⬇ узяти                           ↓
📚 Бібліотека       що є на диску           94 із них у нас
        │                                   тека справи
        │ 🖋 читати                         ↓
📜 Прогони          що прочитано машиною    два голоси, 412 сторінок

Ключ спільний, а сховища роздільні — і це рішення, а не недогляд. Реєстр опису не вливається в реєстр справ: 29 634 рядки без жодного кадру зіпсували б там кожен знаменник, і «прочитано 5%» стосувалося б книг, яких ніхто не бачив.

Нові теки стоять збоку від цієї трійки: у них матеріал без шифри, тобто без ключа. Поки тека не описана, вона невидима для бібліотеки, а отже й для всього далі — прогін по ній не прив'яжеться до справи. Теки згруповано за першою текою під коренем справ («звідки матеріал»), і дій три: «Аркуші», «Описати» (форма опису — крок цього екрана, окремої вкладки в неї немає) і «Не справа» — книгу, газету, опис фонду, яким шифри справи не буде, відкладено в ручні рішення реєстру (overrides.json, розділ set_aside; intake.aside), і вони стоять унизу згорнуто з «Повернути». Збірок (kind=bundle) тут немає: це вже описані групування з прогонами.

Наскрізний шлях

Кожен крок веде кнопкою; жоден не вимагає набирати шифру руками.

  1. 🗺 Газетир — «де метрики Липовенького». Картка села перелічує справи по всіх фондах архіву й позначає ті, що вже на диску.
  2. 🏛 Описи фондів — «а що ще є в цьому фонді». У рядку: ⬇ узяти в роботу, 📚 показати в бібліотеці.
  3. 📚 Бібліотека — «що я маю». У рядку: 🖼 аркуші, 🖋 читати, 📜 прогони, 🔎 шукати в межах справи, 🏛 назад в опис.
  4. 🖋 Читання — прогін рушієм. План (скільки кадрів, яке письмо, яка модель) показується до запуску: справа читається годинами.
  5. 📜 Прогони — «чим і наскільки прочитано». Окремим блоком — прогони без справи, з кнопкою прив'язати.
  6. 📄 Гортач — текст поруч зі сканом, рамка рядка, другий голос.
  7. 🔎 Пошук (Основа) → Розбір → 👁 Облік: кандидат, кроп, вердикт ока.

Пошук у консолі — твоя ж команда

Вкладка «Пошук» (у «Основі», тобто в кожному пресеті) шукає в прочитаному машиною тією самою text.find, що й ти (nysh text find): та сама межа, канали роду, журнал знаменника, самоперевірка, поріг 78. Консоль лише шле її роботою в черзі (search.find) — з поступом і кнопкою спинити. Людина набирає два поля: «Що» (підказки — написання роду з профілю й недавні запити; шукати можна й село чи будь-яке слово) і «Де» (підказки search.scopes — фонди, описи й справи, у яких є прочитане). Рід береться з профілю сам, канали імен і запису вмикаються самі, коли межа — одна справа, а запит — рід. Виписане оком і розібрані записи шукаються як і раніше, search.run.

Якщо людина питає «чому консоль знайшла інше, ніж ти» — спершу звір межу й поріг: команда одна, тож розбіжність означає різні аргументи.

що шукаємо скільки триває
у межах однієї справи секунди
по фонду чи опису (~100 справ) пів хвилини; поступ «справи серії i із n»
по всьому прочитаному хвилини, якщо цей запит ще не шукали; повтор — секунди

Різниця не в тому, ЩО робиться, а скільки. Щоб друге взагалі стало можливим, прочитане лежить у текстовому сторі (data/derived/text_store.sqlite або тека з поля text_store маркера, той самий, що в nysh text …); простір без стору шукає старим погонним індексом (data/derived/decode_index/). Обидва — похідне, їх можна видалити будь-коли.

🔴 Пошук чеше лише зібране, і каже, скільки лишилось поза ним. «Не знайшлось у 876 прогонах із 1159» і «не знайшлось у 1159» — різні відповіді, і за другою закривають напрям, якого не перевіряли. Стан індексу видно на екрані пошуку до запиту, а не застереженням після нього.

Стан на екрані — того індексу, яким пошук справді шукає (search.state, поле backend). Щойно дочитана справа потрапляє в нього сама: бюджет — два десятки прогонів, рівно стільки, скільки з'являється після звичайного читання. Решта — кнопкою «Зібрати індекс» (search.index: лише відсутні прогони, під кнопкою — оцінка часу з темпу самої роботи) або nysh text index --case <справа>. Перебудова правил склейки всього корпусу — nysh text index --rebuild, години, і кнопкою її не роблять.

Що робити, коли екран порожній

Порожній екран у Нишпорці завжди каже, чого саме бракує і чим це ставиться. Три найчастіші випадки:

  • Описи фондів порожні — реєстр опису не зібраний, а не фондів немає. Збирання є на самому екрані (🧾) або командою nysh registry collect, потім nysh registry merge — два кроки, і другий не необов'язковий: обхід кладе свій файл окремо, а реєстр з'являється аж після злиття.
  • Каталоги нічого не знаходять — подивіться на таблицю джерел під полем пошуку. Джерело, що вміє шукати й не має каталогу, названо там поіменно разом із командою, якою це лікується.
  • Бібліотека порожня, а справи на диску є — реєстр не збирали (nysh cases build), або теки лежать без шифри й видимі в Нових теках.

Частини застосунку

Екрани згруповані в секції, і секцію можна вимкнути цілком (⚙ → «Частини застосунку»). Вимкнена секція зникає з шапки, а її дії відмовляють і в браузері, і в командному рядку, і в агента — напівстан («кнопки немає, але команда працює») читається як несправність.

секція екрани навіщо вимикати
Основа Огляд · Пошук · Рід · Нові теки · Роботи · Супряга не можна: без неї немає застосунку
Матеріали Каталоги · Газетир · Описи фондів · Бібліотека · Аркуші якщо працюєте лише з готовим декодом
Читання Читання · Прогони · Хмара · Гортач якщо рушіїв на машині немає (економить ~2.5 ГБ)
Дослідження Розбір · Око · Експорт · Канон · Гіпотези · Дослідження · Історія · Сайт якщо кандидатів оком ще не розбираєте

Готові набори — catalog, amateur, researcher, lab; вибираються в майстрі першого запуску й міняються будь-коли.

🧪 Лабораторія — набори й розмітка

Секція lab вмикається профілем (nysh sections enable lab) і додає два екрани, обидва про мітки для навчання Писаря.

Набори відповідають на питання «що в мене є для розмітки й у якому стані», і числа беруться з диска: скільки кропів лежить, скільки міток у lines.jsonl, скільки рядків зведено арбітрами (high/med/low). Тут же форми на довгі роботи: нарізати кропи з прогону, додати другий голос, поповнити словник справи, зробити завдання арбітрам і забрати відповіді — з воротами у застереженнях.

Розмітка — одна дія людини: подивитись на смужку й написати те, що на ній. Черга йде від рядків, де голоси рушія розійшлись, блоками з різних сторінок; порожні смужки сховані. Клавіатура на ПК: Enter зберегти · Tab пропуск · Shift+Enter непевно · Ctrl+Enter взяти чернетку · Esc назад · PageUp/Down зум · Alt+P сторінка з рамкою · Alt+E/T/I/F — ѣ ъ і ѳ. На телефоні — великі кнопки внизу й свайп по смужці (вправо зберегти, вліво пропустити). Слова чернетки, яких немає в жодному голосі рушія, підсвічені червоним: це домисел арбітра, і його дивляться на кропі, а не приймають одним Enter.