Версия 3.1.0 по имени «Aurora» — это релиз смены вывески: проект MD.Viewer стал MD.Scribe, поведение не изменилось. Полезного в нём два: новое имя во всех местах, где его видит человек и сеть, и починка самообновлятора, который искал в архиве каталог по старому имени. Основной разбор платформы — в обзоре MD Viewer: просмотрщик Markdown без браузерного движка; здесь — что именно поменялось в MD.Scribe 3.1.0 и как это проверить.

TL;DR: что произошло
- Переименование, не переписывание. Код тот же, что в 3.0.1; меняются имена, тексты и манифест.
- Починен самообновлятор. Раньше он искал в архиве
glob('.../MD.Viewer-*'), теперь имя берётся из репозитория. - Пакет переименован в
mdscribe/md-scribe,content-hashвcomposer.lockпересчитан. - Архив самодостаточен:
vendor/внутри, Composer не нужен. - Проверка: распаковать, открыть главную,
/docsиadmin.php.
Что нового
| Область | Изменение |
|---|---|
| Имена в коде | Version::REPO, RAW_BASE, API_BASE, userAgent() указывают на paulmann/MD.Scribe |
| Видимый текст | заголовки окон, шапка админки и страница входа, <meta name="generator">, футер, X-Powered-By, SITE_NAME по умолчанию, баннер в консоли |
| Пакеты | composer.json — mdscribe/md-scribe; content-hash в composer.lock пересчитан и проверен |
| Документация | README, docs/, страницы content/, LICENSE, примеры развёртывания (Docker, nginx, Caddy, php.ini) |
| Манифест | config/manifest.json пересобран: 921 файл, приложение MD.Scribe, версия 3.1.0 |
| Исправление | самообновлятор больше не привязан к имени MD.Viewer-* при распаковке |
flowchart TB PUB["docroot public: просмотр"] --> CORE["ядро: разбор Markdown"] ADMIN["admin.php: панель и редактор"] --> CORE CORE --> STORE["storage: кэш, бэкапы, индекс"] CORE --> VENDOR["vendor: зависимости в архиве"] UPD["updater.php: самообновление"] --> REPO["GitHub: релизы и манифест"]
Про причину переименования в заметках сказано прямо и с числами: старые имена заняты. Поиск по именам репозиториев на GitHub даёт 750 совпадений для md-viewer и 686 для mdview против 24 для md-scribe; заодно имя было свободно на npm и как домен .dev. Это не вопрос вкуса: чем меньше одноимённых проектов, тем легче найти нужный.
Ключевые изменения
flowchart LR OLD["MD.Viewer 3.0.1"] --> REN["переименование: код тот же"] REN --> NEW["MD.Scribe 3.1.0"] NEW --> CFG["config/manifest.json: 921 файл"] CFG --> DEP["развёртывание: архив с vendor"] DEP --> CHK["проверка: главная, /docs, admin.php"]
| Что | Было | Стало |
|---|---|---|
| Имя приложения | MD.Viewer | MD.Scribe |
| Пакет Composer | прежнее имя | mdscribe/md-scribe |
| Поиск архива при обновлении | glob('.../MD.Viewer-*') |
имя из репозитория |
| Манифест | прежний | 921 файл, версия 3.1.0 |
| Метатег генератора | MD.Viewer | MD.Scribe |
Главное техническое изменение — именно обновлятор. Ошибка была тихой: если архив назывался по репозиторию (MD.Scribe-main/), распаковщик не находил ожидаемый каталог и обновление не срабатывало. Такие ошибки опасны тем, что не ломают установку — просто «обновление не приехало», и никто не замечает.
Установка и обновление
unzip MD.Scribe-3.1.0.zip -d /srv/docs
chmod -R u+w /srv/docs/storage
# docroot: /srv/docs/public
# из клона
git clone https://github.com/paulmann/MD.Scribe.git /srv/docs
cd /srv/docs && composer install --no-dev --optimize-autoloader
| Требование | Значение |
|---|---|
| PHP | 8.3 или новее |
| Расширения | mbstring, dom, libxml, json |
| Рекомендуются | curl, phar, zip — для обновлятора и архивов бэкапов |
| База данных | не нужна |
| Сборка | не нужна |
| Composer | не нужен при установке из архива |
Переезд с MD.Viewer не требует миграции: структура каталогов и контракты прежние. Практически это замена каталога с сохранением content/ и storage/.
Проверка после обновления
flowchart TD
I1["главная отдаёт 200"] --> OK{"все проверки зелёные?"}
I2["/docs открывается"] --> OK
I3["admin.php ведёт на настройку"] --> OK
I4["storage доступен на запись"] --> OK
OK -- да --> DONE["готово к работе"]
OK -- нет --> FIX["права, PHP-расширения, docroot"]| Проверка | Ожидаемо |
|---|---|
| Главная отдаёт страницу | HTTP 200 и заголовок с именем MD.Scribe |
| Раздел документации | HTTP 200, тот же шаблон |
admin.php без настройки |
перенаправление на первичную настройку |
<meta name="generator"> |
содержит MD.Scribe |
Запись в storage |
файлы создаются без ошибок прав |
Замеры и цифры
Проверено 12.11.2026, двумя проверками.
| Что | Значение | Как |
|---|---|---|
Архив MD.Scribe-3.1.0.zip |
3 327 231 байт, SHA-256 69cfbeb3…12a7a6b6 |
скачивание ассета релиза |
| Записей в архиве | 945 файлов | разбор zip |
vendor/ внутри |
есть — Composer не нужен | разбор zip |
| Манифест | приложение MD.Scribe, версия 3.1.0, php_min 8.3.0, 921 файл |
config/manifest.json |
| Состав | league 323, scrivo 299, nette 54, assets 46, Markdown 35 |
подсчёт по каталогам |
| Прогон на сервере | PHP 8.5.4, расширения curl dom json libxml mbstring zip |
php -v, php -m |
| Главная | HTTP 200, заголовок «Self-hosted docs, distilled — MD.Scribe» | php -S + curl |
/docs |
HTTP 200 | curl |
admin.php |
HTTP 302 — уводит на первичную настройку | curl |
Отдельно про прогон: приложение поднималось встроенным сервером PHP на свободном порту и отдавало страницы без базы данных и без сборки. Это и есть главное свойство платформы — её можно запустить на голом PHP и убедиться, что она живая, за минуту.
Чего замеры не показывают: работы редактора, поиска и бэкапов в админке — для этого нужна первичная настройка и прогон сценариев, а это отдельная задача. И не проверялась совместимость с PHP 8.4 именно для этого релиза: на 8.5 работает, заявленный минимум 8.3.
Почему переименование — это работа
Смена имени выглядит как правка одной строки, но в проекте, который живёт три года, имя прошито в десятке мест.
Первое: код. Константы с адресом репозитория, базой для сырых файлов и API — если хотя бы одна осталась старой, самообновление и проверка версий начинают ходить по прежнему адресу, и всё «работает», пока старый репозиторий не заморозят.
Второе: видимый текст. Заголовки окон, шапка админки, страница входа, футер, метатег генератора, X-Powered-By. Мелочи, но именно по ним пользователь и поисковик понимают, что за продукт открыт.
Третье: упаковка. Имя пакета в composer.json, пересчёт content-hash в composer.lock — иначе composer validate ругается, а сборка зависимостей идёт по старым метаданным.
Четвёртое: документация и примеры развёртывания. Docker, nginx, Caddy, php.ini — всё это содержит имя в путях и комментариях, и устаревший пример хуже отсутствующего.
Пятое: манифест. Пересобрать config/manifest.json — иначе самопроверка покажет чужое имя приложения и неверную версию.
Отсюда и вывод: 3.1.0 — не «косметика», а согласованная замена идентичности в местах, где она зашита. И самое ценное в релизе — найденная при этом ошибка обновлятора: пока имя меняли, выяснилось, что распаковка была привязана к шаблону старого имени.
Совместимость
| Параметр | Значение |
|---|---|
| Минимум PHP | 8.3 |
| Проверено на | 8.5.4 |
| База данных | не требуется |
| Веб-сервер | любой, умеющий PHP-FPM или CGI |
| Docroot | public/ (рекомендуется) |
| Сборка | отсутствует |
| CDN | не используется |
| Переход | Что делать |
|---|---|
| С MD.Viewer 3.0.1 | заменить каталог, сохранить content/ и storage/ |
| С версий 2.x | свериться с документацией: имя изменилось, контракты прежние |
| На новое имя репозитория | обновить свои скрипты и ссылки, если они указывали на MD.Viewer |
Подводные камни
- Это не переписывание. Ждать новых функций от 3.1.0 не стоит: код тот же, что в 3.0.1.
- Ссылки в ваших скриптах. Всё, что указывало на
paulmann/MD.Viewerв API-запросах, надо перевести на новое имя — старый репозиторий существует, но обновляться не будет. - Манифест — это файл, а не база.
config/manifest.jsonпересобран при выпуске; если правите состав вручную, версия в манифесте и в коде разойдутся. - Docroot. Открывать надо
public/, а не корень проекта: иначе наружу уедутvendor,storageи конфиги. - Права на
storage. Без записи вstorageпанель работает частично и ошибки не всегда очевидны. - Порт при локальном прогоне. Встроенный сервер легко запустить на занятом порту — и тогда вы смотрите на чужое приложение. Проверять надо заголовок и метатег, а не только код ответа.
- Расширения не все обязательны. Без
zipиpharобновлятор и бэкапы не работают, хотя просмотр при этом жив. - Имя и домен. Переименование в коде не переименовывает ваш домен; старые ссылки на сайт живут отдельно.
FAQ
Это новый продукт или переименованный старый?
Переименованный. Код совпадает с 3.0.1, меняются имена, видимый текст, упаковка и манифест.
Нужен ли Composer?
Нет, если ставить из архива релиза: vendor/ внутри. Composer нужен только при установке из клона.
Что именно исправлено в 3.1.0?
Самообновлятор искал в архиве каталог по имени MD.Viewer-*; теперь имя берётся из репозитория, и архив вида MD.Scribe-main/ распаковывается правильно.
Переезд с MD.Viewer сложный?
Нет: заменить каталог, сохранив content/ и storage/. Схема данных не менялась.
Какая версия PHP нужна?
8.3 минимум. Проверено на 8.5.4; обязательные расширения — mbstring, dom, libxml, json.
Почему переименовали?
Старое имя занято: по данным заметок к релизу, 750 репозиториев совпадают с md-viewer и 686 с mdview против 24 у md-scribe.
Итог
MD.Scribe 3.1.0 — аккуратный релиз смены имени: код тот же, но продукт перестал называться половиной того, чем стал. Ценное здесь — починка обновлятора, которая убирает тихий отказ самообновления, и самодостаточный архив на 3,3 МБ с vendor внутри. Проверка подтвердила: манифест честно говорит MD.Scribe 3.1.0 с 921 файлом, а приложение поднимается на PHP 8.5 и отдаёт главную, документацию и редирект на настройку — без базы данных и без сборки.
Цитата: Хорошее переименование не меняет поведение — оно меняет только то, как продукт находят.
Связанные материалы
- MD Viewer: просмотрщик Markdown без браузерного движка — основной разбор платформы, до переименования.
- MD Viewer 1.3.3: что изменилось — предыдущая версия и её правки.
- ctf-collect-to-file: весь код в один документ — другой инструмент той же природы: документация из дерева файлов.
- github-wiki-llm-writer: вики репозитория с проверкой фактов — как делать документацию с проверкой.
- Релиз v3.1.0 — заметки и архив.
LLM Summary
- Тема: MD.Scribe 3.1.0 «Aurora» — релиз переименования бывшего MD.Viewer.
- Суть: код тот же, что в 3.0.1; меняются имя приложения, пакета Composer, видимые тексты, метатег генератора, документация и манифест.
- Исправление: самообновлятор искал в архиве каталог по шаблону
MD.Viewer-*; теперь имя берётся из репозитория, архивMD.Scribe-main/распаковывается корректно. - Пакет:
composer.json—mdscribe/md-scribe,content-hashвcomposer.lockпересчитан и проверен. - Манифест:
config/manifest.json— приложениеMD.Scribe, версия 3.1.0,php_min8.3.0, 921 файл. - Проверено 12.11.2026: архив
MD.Scribe-3.1.0.zip— 3 327 231 байт, SHA-25669cfbeb3…12a7a6b6, 945 записей,vendor/внутри; состав —league323,scrivo299,nette54,assets46,Markdown35. - Прогон: на сервере PHP 8.5.4 с расширениями
curl dom json libxml mbstring zip; встроенный сервер PHP: главная — 200 с заголовком «Self-hosted docs, distilled — MD.Scribe»,/docs— 200,admin.php— 302 на первичную настройку. - Требования: PHP ≥ 8.3,
mbstring,dom,libxml,json;curl/phar/zipрекомендуются; база данных и сборка не нужны. - Грабли: docroot должен быть
public/; нужна запись вstorage/; при локальном прогоне легко попасть на занятый порт и увидеть чужое приложение. - Не проверялось: работа редактора, поиска и бэкапов в админке; совместимость именно с PHP 8.4.
- Ссылки: https://github.com/paulmann/MD.Scribe, https://sysadministrator.ru/md-viewer/
Промт для агента (установка и настройка)
Готовый промт: скопируйте блок целиком. Источник шагов — README.md репозитория MD.Scribe (файла AGENTS.md в релизе нет, проверено по архиву 3.1.0), сверено с прогоном на PHP 8.5.
Задача: развернуть MD.Scribe 3.1.0 из архива релиза и проверить, что просмотр, документация и первичная настройка работают.
Материалы:
- репозиторий: https://github.com/paulmann/MD.Scribe
- README: https://github.com/paulmann/MD.Scribe/blob/main/README.md
- релиз и архив: https://github.com/paulmann/MD.Scribe/releases/tag/v3.1.0
- обзор платформы: https://sysadministrator.ru/md-viewer/
Шаг 1. Скачать MD.Scribe-3.1.0.zip из релиза, распаковать: unzip MD.Scribe-3.1.0.zip -d /srv/docs
Шаг 2. Выдать права на запись: chmod -R u+w /srv/docs/storage
Шаг 3. Направить docroot на /srv/docs/public — не на корень проекта.
Шаг 4. Проверить PHP: версия >= 8.3, расширения mbstring, dom, libxml, json; желательно curl, phar, zip.
Шаг 5. Открыть главную — ожидается 200 и заголовок с именем MD.Scribe; проверить <meta name="generator">.
Шаг 6. Открыть раздел документации — ожидается 200 и тот же шаблон.
Шаг 7. Открыть admin.php — ожидается перенаправление на первичную настройку.
Шаг 8. Пройти первичную настройку, проверить запись в storage и создание бэкапа.
Шаг 9. Если переезжаете с MD.Viewer: сохранить content/ и storage/, заменить остальное.
Запрещено:
- открывать наружу корень проекта вместо public/ — уедут vendor, storage и конфиги;
- ставить из клона без composer install --no-dev;
- считать успешным локальный прогон, не сверив заголовок страницы: на занятом порту отвечает чужое приложение;
- менять config/manifest.json вручную: версия в манифесте и коде разойдутся;
- опираться на старое имя репозитория MD.Viewer в скриптах обновления;
- публиковать наружу .env и данные storage.
Что считать успехом: главная и документация отдают 200, admin.php ведёт на настройку, запись в storage работает, метатег генератора содержит MD.Scribe, бэкап создаётся.