До списку уроків
11 клас · Урок 8 з 14

Звʼязна база знань: вікі-лінки, MOC, публікація

виконано0%
Крок 1

Учора — вісім файлів. Сьогодні — мережа, яку можна відкрити з браузера

Тема 5, урок 2 з 2. Другий і останній підхід до бази знань продукту

На минулому уроці ти зробив вісім атомарних нотаток із front-matter і поклав їх у ~/www/kb/. Формально база є. Практично — це вісім окремих текстів, які нічого одне про одного не знають. Відкрий будь-який із них і спробуй відповісти: що ще в моїй базі стосується цієї думки? Зараз відповідь дає тільки твоя памʼять, а вона стирається за два тижні.

Сьогодні ти робиш три речі. Звʼязуєш нотатки одну з одною — для цього досить написати назву сусідньої нотатки у подвійних дужках: [[назва]]. Складаєш карту: файл kb/index.md, з якого починають читати базу. Публікуєш — перетворюєш .md на звичайні сторінки сайту. Після цього база знань відкривається з твого сабдомену, як і решта проєкту.

Після уроку ти вмієш

Хід уроку

ЕтапХвЩо робимо
Вхідний зріз10Граф класу: у кого скільки сиріт і битих лінків
Зв'язність і сироти15Чому нотатка без вхідних посилань фактично не існує
Вікі-зв'язки30Розставляємо ≥12 посилань [[…]], доводимо биті лінки до 0
MOC і гігієна бази15Що таке карта змісту і чим вона краща за пошук навмання
kb/index.md20Пишемо карту змісту зі 100% покриттям нотаток
Генерація і публікація20mdbuildindex.html і сторінки нотаток, перевірка з сабдомену
Автоперевірка й підсумок10check11 5 повністю
Разом120

Слова «вікі-посилання», «граф» і MOC поки нічого не означають — розберемо кожне тоді, коли воно знадобиться.

Було після уроку 7Стане після уроку 8
8 файлів .md у теціграф із ≥ 12 звʼязків, у якому видно структуру дослідження
знайти нотатку можна пошуком, якщо памʼятаєш словоу кожну нотатку веде хоча б один вхід — випадкових знахідок більше нема
теки немає точки входуkb/index.md — карта змісту з розділами, а не список файлів
файли читає тільки Obsidian у тебе на компʼютеріhttp://91.219.61.4/s/<логін>/kb/ відкриває будь-хто, кому ти даси посилання
Що сьогодні робиться де Звʼязки й карту ти пишеш у себе на компʼютері — у редакторі або в Obsidian. По SFTP їде тільки легкий текст: оновлені .md і згенеровані .html. Жодних скриншотів графа: граф ти показуєш очно на своєму екрані, а на сервері живуть сторінки.

На цій сторінці дві майстерні, які можна покрутити руками. У першій ти тягнеш звʼязок між нотатками й одразу бачиш, який рядок і в який файл дописати. У другій вставляєш свої .md і отримуєш готовий код kb/index.html.

Крок 2

Чому тека змушує обирати, а звʼязок — ні

Одна нотатка може належати трьом темам одразу. Файл — одній теці

Тека — це фізичне місце. Файл лежить у ній, і більше ніде. Поки нотаток десять, це не болить. Але нотатка pricing-idea.md — «гіпотеза ціни» — чесно стосується ринку (ціни конкурентів), економіки (маржа) і користувачів (скільки вони готові платити). Куди її класти?

Хоч би що ти обрав, ти обираєш за себе майбутнього. Через місяць ти шукатимеш цю нотатку в іншій теці — бо тоді думатимеш про неї з іншого боку. Копіювати файл у три теки ще гірше: три копії розʼїдуться, і жодна не буде правдою.

Теки: обираєш одне місце — і за місяць шукаєш в іншому kb/market/ kb/economy/ kb/users/ pricing-idea.md ? ? ? три теми — одне місце; дві теми лишаються без цієї нотатки копія в кожну теку розʼїдеться за два тижні Звʼязки: файл лежить будь-де, входів стільки, скільки тем pricing ринок ціни маржа люди кожна лінія — рядок [[pricing-idea]], дописаний у відповідну нотатку файл один, входів чотири; жодної копії
Тека відповідає на питання «де лежить файл». Звʼязок відповідає на інше питання — «що ще стосується цієї думки». Друге питання ти ставиш частіше.

Вікі-посилання: як воно пишеться

Синтаксис прийшов із вікі-рушіїв і живе в Obsidian, Logseq, Foam, Quartz та інших інструментах. У Obsidian це формат за замовчуванням саме тому, що він коротший за звичайне посилання Markdown.

ПишешЩо це значить
[[competitors]]посилання на файл competitors.md у тій самій базі; підпис — сама назва
[[competitors|три прямі конкуренти]]той самий файл, але в тексті видно людський підпис після вертикальної риски
[[competitors#Ціни]]посилання на конкретний заголовок усередині нотатки
[Конкуренти](competitors.md)те саме звичайним Markdown — довше, але зрозуміле будь-якому інструменту

Всередині квадратних дужок — імʼя файлу без розширення, а не заголовок із front-matter. Це головне джерело битих посилань: заголовок у тебе українською («Конкуренти»), а файл названий за правилом уроку 7 — competitors.md, латиницею в kebab-case.

Регістр і дефіси значущі Сервер під Linux розрізняє великі й малі літери: [[Competitors]] і [[competitors]] — два різні файли, і один із них не існує. На твоєму Windows-ноутбуці обидва варіанти можуть «працювати» в Obsidian, а після заливки на сервер сторінка віддасть 404. Пиши так само, як зветься файл: малими, латиницею, через дефіс.
Питання

Нотатка «гіпотеза ціни» чесно стосується конкурентів, юніт-економіки й аудиторії. У теках ти маєш покласти файл кудись один. Що буде далі?

Питання

У нотатці ти написав [[Конкуренти]], бо саме так називається нотатка в заголовку. Файл при цьому зветься competitors.md. Ти впевнений, що звʼязок є. Що сталося насправді?

Крок 3

Зворотні посилання: половина звʼязку, яку ти не пишеш

Пряме посилання ти ставиш сам. Зворотне зʼявляється саме — і саме воно рятує

Коли в нотатці pricing-idea.md ти написав [[competitors]], ти зробив пряме посилання: із ціни на конкурентів. Але програма при цьому безкоштовно робить друге — зворотне: тепер у нотатці competitors.md видно, що на неї послалася нотатка про ціну. Ти цього рядка не писав. Він порахований із твоєї бази.

pricing-idea.md Ціну 149 грн беру не зі стелі: у [[competitors]] двоє тримають 199 грн, один — 99 грн. цей рядок ти написав руками competitors.md Три прямі конкуренти, тарифи і чим вони не влаштовують нашу аудиторію. про ціну тут не сказано жодного слова пряме — пишеш ти зворотне — рахує програма Сюди посилаються (2) pricing-idea — «двоє тримають 199 грн» index — розділ «Ринок» Відкриваєш конкурентів — і одразу бачиш, що на них уже спирається рішення про ціну. Без цієї панелі ти б згадав про це, лише якби згадав. А ти не згадаєш.
Пряме посилання ти ставиш один раз і забуваєш. Зворотне працює щоразу, коли ти відкриваєш нотатку, — і показує саме те, чого ти не шукав.

Чому зворотні цінніші за прямі

Пряме посиланняЗворотне посилання
Хто створюєти, руками, у момент письмапрограма, автоматично, з усієї бази
Що показуєкуди ти свідомо пославсязвідки на цю думку послалися — зокрема те, про що ти забув
Коли кориснеколи читаєш нотатку послідовноколи збираєшся щось у ній змінити
Чи можна помилитисятак: помилка в назві дає битий лінкні: воно похідне від прямих, окремо не ламається

Практичне правило: перш ніж міняти число в нотатці — подивись, хто на неї посилається. Змінив обсяг ринку в market-size.md — панель зворотних посилань покаже, що на нього спираються pricing-idea і index. Саме ці два файли доведеться перечитати. Без панелі ти дізнаєшся про це на Demo Day, коли журі спитає, чому в двох місцях різні цифри.

Ідея не нова: у Вікіпедії те саме зветься «Посилання сюди» (What links here) і є в кожної статті. Obsidian, Logseq і Roam зробили цю панель постійно видимою збоку — і саме через неї нотатки перестали бути окремими файлами.

Питання

Ти зібрався виправити обсяг ринку в market-size.md — знайшов свіжіші дані. Перш ніж міняти число, треба знати, які твої висновки на нього спираються. Куди дивишся?

Крок 4

Майстерня: граф твоєї бази знань

Тягнеш звʼязок — сторінка каже, який рядок і в який файл дописати

Нижче — демонстраційна база з девʼяти вузлів: карта index і вісім нотаток. Стан навмисно хворий: шість звʼязків, пʼять сиріт і один битий лінк. Твоє завдання — довести граф до здорового: ≥ 12 звʼязків, 0 битих, 0 сиріт, карта покриває 100 %. Рівно ті самі числа перевіряє check11 5 у твоїй справжній базі.

Граф-хірургія

Перетягни від одного вузла до іншого, щоб додати звʼязок. Клацни по вузлу — побачиш його прямі й зворотні посилання. Червоні вузли, що пульсують, — сироти.

    Коли граф стане здоровим, тут зʼявиться чернетка kb/index.md, зібрана з поточних звʼязків і тегів — її можна взяти за основу своєї карти.

    Демонстраційні дані Назви нотаток тут — типові для дослідження стартапу, але це не твоя база. Свою ти правиш у себе в редакторі: сторінка показує які саме рядки дописати, а дописуєш їх ти у своїх .md. Перевірка на сервері читає файли, а не цю сторінку.
    Питання

    Ти написав нотатку про ризик проєкту й за місяць про неї забув. На неї не посилається жоден файл, у index.md її немає. Що це означає практично?

    Крок 5

    MOC: карта змісту, а не список файлів

    Пошук працює, коли ти знаєш слово. Карта потрібна, коли не знаєш

    Уяви нотатку, у якій немає жодного власного дослідження. Вона тільки збирає тему: усередині розділи, а в розділах — посилання на інші нотатки. Біля кожного посилання один рядок про те, навіщо туди йти.

    Таку нотатку називають картою змісту, англійською map of content, скорочено MOC. Термін популяризував Нік Міло у підході Linking Your Thinking. Сама ідея старша: так само влаштовані оглядові статті у Вікіпедії.

    Чим це краще за просте «зміст»? Зміст перелічує, що є. Карта показує, як воно повʼязане і з чого починати. Різниця стає видимою на двадцятій нотатці. Плоский список із двадцяти рядків не читається взагалі. А карта з чотирьох розділів по пʼять читається за пів хвилини.

    Плоский зміст: девʼять рядків - [[competitors]] - [[feature-reminders]] - [[market-size]] - [[pricing-idea]] - [[problem-statement]] - [[risk-churn]] - [[source-dou-survey]] - [[target-audience]] - [[brand-tokens]] алфавіт нічого не пояснює: перший рядок і останній однаково важливі, з чого починати — невідомо MOC: вузол, що збирає тему index.md карта бази Ринок Продукт Ризики розділ називає тему, а не файл; від карти до будь-якої нотатки — два кліки, і по дорозі видно, де ти є
    MOC — це вузол з високим ступенем звʼязності, який ти створюєш свідомо. У графі він одразу видно: до нього сходиться найбільше ребер.

    Як виглядає нормальний kb/index.md

    kb/index.md
    ---
    title: База знань продукту
    tags: [moc, індекс]
    date: 2026-09-22
    ---
    
    # База знань «TrackIt»
    
    Карта дослідження. Кожен розділ — питання, на яке ми шукали відповідь.
    
    ## Кому і навіщо
    
    - [[problem-statement]] — яку саме проблему беремо, одним абзацом
    - [[target-audience]] — хто наш користувач і чим він зайнятий зараз
    
    ## Ринок і гроші
    
    - [[competitors]] — три прямі конкуренти й де вони слабкі
    - [[market-size]] — обсяг ринку, числа з `data/market.csv`
    - [[pricing-idea]] — гіпотеза ціни й чому саме 149 грн
    
    ## Продукт
    
    - [[feature-reminders]] — ідея нагадувань, найдорожча за розробкою
    
    ## Ризики й джерела
    
    - [[risk-churn]] — користувачі йдуть після першого тижня
    - [[source-dou-survey]] — звідки взяті цифри про аудиторію

    Зверни увагу на три речі. Розділи названі питаннями теми, а не типами файлів. Після кожного посилання — рядок про те, навіщо ця нотатка. І посилань рівно стільки, скільки нотаток у базі: карта покриває 100 %, інакше частина бази лишається за межами будь-якого маршруту.

    MOC — теж нотатка Її можна згадувати з інших нотаток ([[index]]), у неї є front-matter, вона потрапляє в граф. Коли база виросте, MOC-ів стане кілька: карта ринку, карта продукту — і одна головна карта, що посилається на них. Для восьми нотаток вистачить однієї.
    Питання

    У базі 24 нотатки. Ти зробив index.md — плоский список із 24 рядків в алфавітному порядку. Однокласник каже, що це не MOC. Чому він правий?

    Питання

    Ти повертаєшся до проєкту після двох тижнів канікул і не памʼятаєш, що взагалі встиг дослідити. Пошук по базі тут майже не допомагає. Чому?

    Крок 6

    Три хвороби бази знань і як їх помітити

    Усі три не видно в теці з файлами. Усі три видно в графі

    1. Сирота 0 жодної вхідної стрілки: у неї немає входу знайти можна лише випадково або точним словом у Вікіпедії такі статті звуть темною матерією 2. Битий лінк pricing-idea ? [[Конкуренти]] у нотатці написано: [[Конкуренти]] на диску лежить: competitors.md файлу «Конкуренти.md» не існує в Obsidian такий лінк сірий, на сайті — 404; у вікі його малюють червоним, і це навмисно: червоне посилання — нагадування, що тут треба або файл, або виправлена назва 3. Звалище сиріт нема, битих нема, звʼязків багато — і жодне ребро нічого не означає звʼязок, який є між усіма, не несе інформації: це шум, а не структура
    Перші дві хвороби автоперевірка ловить сама. Третю ловить лише людина — тому вчитель дивиться граф очно й питає, чому саме ці дві нотатки повʼязані.

    Чотири метрики здоровʼя бази

    МетрикаНормаЩо означає провал
    Сироти — нотатки без вхідних посилань0частина бази недосяжна маршрутом: до неї не дійти ані з карти, ані з іншої нотатки
    Глухі кути — нотатки без вихідних посиланьрідкодумка ні на що не спирається; часто це знак, що нотатку не дочитали й не додумали
    Биті посилання0помилка в назві файлу; на сайті це прямий 404 у публічній базі знань
    Покриття картою100 %у index.md згадані не всі нотатки — решта живе поза будь-яким маршрутом
    Розподіл тегів≥ 4 теги, жоден > 60 %тег, що стоїть на всьому, нічого не фільтрує — це той самий шум, що й звалище

    Як помітити хвороби без графа? Три команди в SSH-сесії роблять те саме. Перша рахує всі вікі-посилання в базі:

    SSH-сесія на сервері
    $ grep -oh '\[\[[^]]*\]\]' ~/www/kb/*.md | wc -l 9

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

    биті посилання й сироти — вставити в SSH-сесію
    # биті: ціль посилання, для якої немає файлу
    cd ~/www/kb
    grep -oh '\[\[[^]|#]*' *.md | sed 's/^\[\[//' | sort -u | while read n; do
      test -f "$n.md" || echo "БИТЕ: [[$n]]"
    done
    
    # сироти: файл, на який не посилається жоден інший файл
    for f in *.md; do
      n=${f%.md}
      c=$(grep -l "\[\[$n" *.md | grep -cv "^$f$")
      test "$c" -gt 0 || echo "СИРОТА: $f"
    done

    Обидва фрагменти — для шелла на сервері (bash). У PowerShell на твоєму ноутбуці вони не запрацюють: там інший синтаксис циклів і немає grep. Тому запускай їх у SSH-сесії, а не в локальному терміналі.

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

    Щоб швидко закрити перевірку, учень поставив у кожній нотатці посилання на всі інші. Сиріт немає, битих немає, посилань 56. Що з цим не так?

    Питання

    Учитель просить показати шлях від index.md до будь-якої нотатки за два кліки. У тебе до source-dou-survey виходить за чотири. Про що це говорить?

    Крок 7

    Як із набору .md зробити сторінки сайту

    Генератор статичного сайту: один прохід — і замість файлів у тебе сторінки

    Браузер не вміє читати Markdown. Якщо покласти competitors.md у ~/www/kb/ і відкрити його за посиланням, побачиш сирий текст із дужками й дефісами — або взагалі діалог «зберегти файл». Між нотатками й сайтом потрібен перетворювач.

    Клас інструментів, що це роблять, зветься генератори статичного сайту (static site generator, SSG). Найвідоміші — Jekyll, Hugo, Eleventy, MkDocs, Quartz. Усі вони роблять по суті одне: беруть теку з текстовими файлами й шаблон, а віддають теку з готовими .html.

    1. Твої нотатки competitors.md pricing-idea.md index.md текст + front-matter і рядки [[назва]] 2. Генератор 1 · читає front-matter: title, tags, date — з них будується список 2 · Markdown → HTML: ## Ціни стає <h2>Ціни</h2> 3 · вікі-посилання → звичайні: [[competitors]] стає <a href="competitors.html"> 4 · підставляє шаблон і твій brand.css 3. Сайт kb/index.html kb/competitors.html kb/pricing-idea.html вебсервер просто віддає ці файли як є Перетворення відбувається один раз, до візиту читача. Ані бази даних, ані коду під час перегляду — тому сайт швидкий і його майже нічим зламати
    Той самий конвеєр працює і в Obsidian Publish, і в GitHub Pages, і в нашому mdbuild на сервері. Змінюються шаблони й швидкість — ідея та сама.

    Статичний сайт проти «живого»

    Статичний сайт із .mdСайт із базою даних (CMS)
    Коли будується сторінкаодин раз, після зміни файлівщоразу, коли хтось відкриває
    Що лежить на серверіготові .html, .cssкод, база даних, середовище виконання
    Що ламаєтьсяпрактично нічого: файли не мають логікионовлення, доступ до бази, вразливості коду
    Джерело правдитвої .md — можна відкрити хоч у «Блокноті» через 10 роківрядки в базі; без цієї CMS вони мало що варті
    Ціна помилки в назві файлубитий лінк видно одразу, на збірціпомилка виявиться в браузері користувача

    На сервері збірку робить утиліта mdbuild. Вона робить рівно те, що на схемі. А ще друкує попередження про биті посилання. Тому її вивід варто прочитати, а не прогорнути.

    SSH-сесія на сервері
    $ mdbuild ~/www/kb прочитано .md: 9 попередження: [[Конкуренти]] у competitors.md — файлу немає попередження: risk-churn.md не має вхідних посилань згенеровано: index.html + 8 сторінок нотаток готово: http://91.219.61.4/s/<логін>/kb/

    Вивід ілюстративний: у тебе будуть свої імена й свої попередження. Але формат саме такий — спершу попередження, потім результат. «Готово» наприкінці не означає, що все добре: збірка завершується навіть із битими посиланнями, просто сторінка потім віддає 404.

    Навіщо база знань на сайті продукту

    Публічна база знань — це не «ще одна сторінка». Це відповідь на питання, яке журі й перші користувачі ставлять завжди: звідки ви це взяли? Поклади поруч із лендингом теку /kb/. У ній видно джерела цифр, перелічені ризики й записано, чому ціна саме така. Після цього продукт перестає бути презентацією й стає роботою, яку можна перевірити.

    Це працює і в дорослих продуктах: розділи «Docs», «Handbook», «Changelog», «Engineering blog» існують не для краси. Вони показують, що всередині є думка, і знімають половину питань ще до розмови.

    Питання

    Ти виправив одну нотатку й хочеш, щоб сайт бази оновився. Що робить генератор статичного сайту — і чого він не робить?

    Питання

    На Demo Day журі відкриває твій лендинг і бачить посилання «База знань». Навіщо взагалі публікувати kb на сайті продукту, а не тримати її в Obsidian у себе на ноутбуці?

    Крок 8

    Майстерня: генератор публікації

    Вставляєш свої .md — отримуєш готовий код kb/index.html

    Нижче — той самий конвеєр, тільки в браузері. Він читає front-matter, перетворює вікі-посилання на HTML-лінки, групує нотатки за тегами, перевіряє биті посилання й віддає готовий код. Формат вводу: перед кожним файлом рядок === імʼя-файлу.md ===, далі — вміст файлу як є.

    mdbuild у браузері
    Що робити з цим кодом Скопіюй, збережи у себе як kb/index.html у кодуванні UTF-8 і залий по SFTP у ~/www/kb/. Або, якщо працюєш у SSH-сесії, просто запусти mdbuild ~/www/kb — результат буде той самий, тільки ще й сторінки окремих нотаток згенеруються. Ця майстерня потрібна, щоб ти побачив, що саме робить генератор, а не сприймав його як чорну скриньку.
    Кодування має значення Якщо збережеш index.html у Windows-1251 або в UTF-16, кирилиця в браузері перетвориться на «кракозябри». У PowerShell це класична пастка: … > index.html пише UTF-16. Зберігай редактором у UTF-8 або пиши [IO.File]::WriteAllText($p,$t,(New-Object Text.UTF8Encoding $false)).
    Питання

    Генератор зібрав index.html, але одна нотатка потрапила в розділ «без тегу», хоча ти теги їй ставив. Де шукати причину?

    Крок 9

    Що не можна класти в публічну базу

    Коротко, але це найдорожчий блок уроку

    Тека ~/www/kb/ публічна. Усе, що туди потрапило, віддається будь-кому, хто знає адресу, — а адресу знає той, кому ти надіслав посилання на Demo Day. Перед заливкою база проходить через фільтр із трьох питань.

    Робоча база в тебе competitors.md pricing-idea.md risk-churn.md interview-2.md deploy.md team-talk.md Перед публікацією 1 · чи є тут чуже імʼя, телефон, місце роботи? 2 · чи є тут пароль, ключ, токен, адреса сервера? 3 · чи готовий я, щоб це прочитав конкурент? ~/www/kb/ — публічна competitors · pricing-idea risk-churn · index відкриється з будь-якого браузера ~/notes/ — приватна interview-2 · deploy · team-talk не віддається по HTTP і не потрапляє в збірку
    Фільтр застосовується до заливки, а не після. Файл, який полежав у публічній теці півгодини, вважай оприлюдненим.
    Не публікуємоЧомуЩо робимо натомість
    Чернетки інтервʼю з іменами, телефонами, місцем роботи респондентів це персональні дані інших людей; вони погоджувалися на розмову, а не на публікацію у kb/ лишається знеособлений висновок: «троє з пʼятьох згадали X»; сирі записи — у ~/notes/
    Внутрішні домовленості: хто кому винен, оцінки однокласників, суперечки це не інформація про продукт, і читати її буде хтось, кого ти не мав на увазі тримати поза kb/; у базі — рішення, а не хід сварки
    Ключі, токени, паролі, рядки підключення, адреси службових панелей публічний файл індексується й читається ботами за хвилини; ключ у файлі — це вже витік виносиш у ~/notes/ і міняєш ключ — старий вважай скомпрометованим
    Чужі тексти й зображення, скопійовані цілком публікація чужого без дозволу — вже не «нотатка для себе» цитата на 2–3 речення + посилання на джерело у front-matter
    Прибрати файл — не те саме, що прибрати дані Видалення файла з ~/www/kb/ не витирає його з кеша пошуковика, зі скриншотів і з чиєїсь відкритої вкладки. Тому єдина надійна дія з оприлюдненим паролем — змінити пароль, а не видалити файл. Для масштабу: за даними GitGuardian, лише за 2025 рік у публічних комітах на GitHub зʼявилося понад 28 мільйонів захардкоджених секретів. І це люди, які добре знають, що так робити не можна.
    Питання

    У чернетці interview-2.md є імʼя, телефон і місце роботи людини, яку ти опитував, а в deploy.md — пароль до FTP. Ти збираєшся залити kb/ у ~/www/kb/. Що робиш?

    Крок 10

    Практика: звʼязати, скласти карту, опублікувати

    Виконуй по черзі. Галочки зберігаються — сторінку можна закрити.

    Що робиться де Звʼязки [[…]] і kb/index.md ти пишеш у себе на компʼютері — у редакторі або в Obsidian, зберігаючи файли в UTF-8. По SFTP у ~/upload/~/www/kb/ їдуть тільки оновлені .md та index.html. Збірку mdbuild запускаєш уже в SSH-сесії. Скриншоти графа на сервер не завантажуються — граф учитель дивиться очно на твоєму екрані.

    Дві команди, які знадобляться

    SSH-сесія: збірка й швидкий підрахунок
    $ mdbuild ~/www/kb $ grep -oh '\[\[[^]]*\]\]' ~/www/kb/*.md | wc -l 14 $ ls ~/www/kb/*.html | wc -l 9

    Обидві команди набирають у вікні сервера, тобто в SSH-сесії. У PowerShell на твоєму ноутбуці вони не спрацюють: там немає ані grep, ані mdbuild. І && між командами PowerShell теж не розуміє.

    Крок 11

    Автоперевірка check11 5

    Система прочитає твої .md, побудує граф і зробить реальний запит на /kb/. Спроби не обмежені.

    Демонстраційний режим: результат згенеровано для показу. На сервері ця кнопка запускає check11 5 від імені учня і читає ~/.progress/11-5.json.

    Про два обовʼязкові критерії no_secrets і no_media блокують оцінку. Перший — тому що публічна тека з чужими персональними даними чи ключем це не «недоробка», а шкода іншій людині. Другий діє наскрізно весь модуль. У ~/www/ і ~/upload/ не має бути відео й звуку: .mp4 .mov .avi .mkv .webm .mp3 .wav .flac. Файлів понад 2 МБ там теж бути не повинно. На уроці 14 check11 8 прожене все це повторно.

    Що вчитель дивиться на екрані

    Крок 12

    Шкала виконання

    Це те, що бачить учитель, коли виставляє оцінку.

    СкладникВагаРезультат
    Виконано
    0%
    Рекомендований бал за 12-бальною

    Домашнє завдання

    1. Додай у базу дві нотатки з висновками уроків 3–4 — числа ринку з data/market.csv і юніт-економіка з analytics.html. Кожна з валідним front-matter і назвою в kebab-case.
    2. Уплети їх у граф: кожна має вхідне посилання з іншої нотатки і рядок у kb/index.md. Сиріт після цього бути не повинно.
    3. Перезбери базу (mdbuild ~/www/kb) і перевір, що всі посилання на /kb/ відкриваються — 0 битих.
    4. Запиши у CHANGELOG.md один рядок: скільки звʼязків стало і яку хворобу бази ти в себе знайшов.
    Анонс уроку 9 Далі — тема 6: онлайн-дошки й беклог. Ідеї функцій, які ти сьогодні записав у feature-*.md, підуть на дошку й згрупуються в кластери. З них вийде машинозчитуваний файл tasks.json — беклог запуску твого продукту.
    Джерела

    Звідки взяті факти

    Усе, що на цій сторінці подано як факт, має посилання. Перевіряти дозволено й корисно.

    Числа у виводі mdbuild, назви демонстраційних нотаток і вміст графа на цій сторінці складені як типові для навчальної бази. У твоєму ~/www/kb/ вони будуть свої. Утиліта mdbuild — навчальна обгортка над тим самим конвеєром, що описаний у документації генераторів вище. Повний список джерел із поясненнями — у файлі urok-08-джерела.md поруч із цією сторінкою.