phase0: archive Python implementation under archive/

This commit is contained in:
Sergey Filkin
2026-04-18 11:29:36 +03:00
parent 771169f93f
commit 425eae7170
20 changed files with 558 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
1. Функциональный паритет с GitHub API. Сейчас HTML от GitHub даёт: таблицы, task-list, strikethrough, autolinks, footnotes, подсветку кода, emoji
:name:, и главное — обёртки <div class="markdown-heading"> с якорями <a class="anchor"> (на них завязан CSS в template.html). Что нужно сохранить 1-в-1?
- a) Полный GFM (goldmark поддерживает через extension.GFM) — да/нет?
- b) Подсветку кода chroma встроить в <pre><code>? Или оставить «просто теги» без классов?
- c) Emoji-shortcodes (yuin/goldmark-emoji)?
- d) Обёртки heading’ов с якорями (делается через abhinav/goldmark-anchor или кастомный renderer). Если убрать — придётся править CSS в шаблоне.
- e) Frontmatter (---) — парсить/игнорировать/использовать для title?
2. Архитектура Go-приложения. Предлагаю один бинарник с подкомандами:
- serve — единый HTTP-сервер: / и /convert (форма на templUI, HTMX-превью), /api/convert, /preview/{id}, /health, /version, /ready, /download/{id}.
- cli <file.md> — режим CLI (заменяет md_to_html.py).
Подходит, или надо разделить два бинарника (api и ui)?
3. templUI-стек. templUI = templ + Tailwind + Alpine.js + HTMX. Подтвердите:
- a) Tailwind CSS сборку (tailwindcss CLI) встраиваем в Docker/Makefile?
- b) HTMX для live-превью (без полной перезагрузки) — желательно?
- c) Тёмная тема / языковой переключатель — нужны или оставляем русский-only как сейчас?
4. Структура репозитория. Ваш вариант — archive/ для Python, корень для Go. Подтвердите:
/archive/ # текущий Python-проект целиком
/cmd/md-to-html/ # main.go
/internal/converter/ # goldmark-рендер
/internal/server/ # HTTP handlers
/internal/ui/ # .templ файлы (templUI components)
/web/static/ # Tailwind output, favicon
/template/ # самодостаточный HTML-шаблон для итога
go.mod / Makefile / Dockerfile
Go module path — github.com/fserg/md-to-html?
5. Шаблон итогового HTML. template.html сейчас рассчитан на GitHub-разметку (классы .markdown-heading, .heading-element, .anchor). Варианты:
- a) Сохранить визуал идентично → реализовать goldmark-renderer, генерирующий ту же разметку.
- b) Упростить шаблон под «чистый» goldmark-вывод (меньше кода, чуть другой вид h2/h3).
Какой?
6. Версионирование и релизы. Сейчас v0.1.2, GitHub Actions собирает Docker в GHCR. После переписывания:
- a) Бампнуть до v0.2.0 (или v1.0.0)?
- b) CI: заменить на Go-сборку (тесты + cross-compile linux/amd64,arm64, darwin/arm64) + Docker multi-stage?
- c) Публиковать бинарники в GitHub Releases?
7. Нефункциональное.
- Лимиты MAX_MARKDOWN_BYTES, MAX_REQUEST_BYTES — переносим (envs)?
- Go 1.23+?
- Тесты: golden-файлы (MD→HTML diff против эталона) + smoke-тесты HTTP?
- air / templ generate --watch для dev-режима?
# Ответы
1. Полный GFM и хотелось бы подсветку кода. Шаблон можно править как угодно под новый рендер. Якоря в заголовках хотелось бы сохранить, так как они полезны для навигации по документу.
2. Один бинарник, включая cli режим.
3. templUI можно встраивать в бинарник? Лайв-превью было бы круто, но не критично. Тёмная тема и языковой переключатель не нужны, так как целевая аудитория русскоязычная.
4. archive/ для Python, корень для Go
5. Шаблон поменяй под новый проект
6. После перехода на Go предлагаю бампнуть до v0.2.0
7. Про лимиты не знаю, на твое усмотрение и Го - на твой выбор. Тесты с golden-файлами звучат отлично, а для dev-режима air / templ generate --watch будет удобно.
===
Сохрани подробный план как md/02-01-plan.md