chore(docs): уборка структуры — вся документация в docs/, краткий README, добавлен AGENTS.md

- AGENTS.md: правила проекта (структура доков, стек, статьи, деплой, git, openspec, проверки)
- README.md: сокращён до введения + указателей на docs/
- docs/: DEPLOY_INSTRUCTIONS, ROADMAP, PAPERMOD_PARAMS, QWEN, gitea-setup,
  Telegram_frontend, ssh_setup, archive/PROJECT_SUMMARY (из .qwen/)
- tools/: winscp_script.txt переехал из корня к deploy_sftp.py
- Makefile и deploy_sftp.py: ссылки на docs/DEPLOY_INSTRUCTIONS.md
This commit is contained in:
2026-09-12 09:58:09 +00:00
parent 80eb3c709d
commit d426aa39ed
13 changed files with 145 additions and 103 deletions
+87
View File
@@ -0,0 +1,87 @@
# AGENTS.md — правила работы с проектом dedinit.ru
## Общие принципы
1. Взаимодействие и документация — на русском языке.
2. Все важные решения и изменения фиксируются в README.md (кратко) и соответствующих документах в `docs/`.
3. Перед применением изменений проверяется корректность принятых решений.
4. Цель — максимально быстро публиковать контент без поломки сайта.
## Структура документации
- `README.md` — ТОЛЬКО краткое введение в проект для репозитория:
что это, стек, быстрый старт (сборка/деплой) и указатели на `docs/`.
Никакой подробной документации и истории изменений в README не держим.
- `docs/` — вся подробная документация проекта:
инструкции, справочники, дорожные карты, заметки об опыте настройки.
- `AGENTS.md` — правила работы для агентов (этот файл).
- Подробная эксплуатационная документация НЕ должна лежать в корне репозитория.
Новые документы создавать только в `docs/`.
## Технологический стек
| Параметр | Значение |
|----------|----------|
| Генератор | Hugo Extended 0.165.x |
| Тема | rDedInit (форк PaperMod) |
| Язык | Русский (ru-ru), timeZone Europe/Moscow |
| Формат статей | Bundle: `content/posts/<name>/index.md` (+ hero.svg и др.) |
| Git-хостинг | gitverse.ru — источник истины (kpa39l/dedinit.ru) |
| Деплой | SFTP на kpa39l.myjino.ru:2222 |
## Статьи (контент)
- Новые статьи: `content/posts/<YYYYMMDD - slug>/index.md`.
- Frontmatter: `date`, `lastmod` — в прошлом (Hugo молча не публикует
страницы с датой в будущем), `draft: false`, `title`, `slug`.
- hero.svg для статьи: `viewBox="0 0 1200 400"`, фон `#0a0c10`,
паттерн-гексагон `#1a2332`, заголовок моноширинный `#58a6ff`.
Копировать hero.svg из последнего поста как базу — единый стиль.
- Блочный код с подсветкой — обязателен там, где нужен (цель проекта).
## Сборка и деплой
```bash
# ЕДИНСТВЕННЫЙ способ деплоя — make deploy. Не заменять на rsync/ssh-exec:
# аккаунт Jino SFTP-only (exec request failed on channel 0).
export SSHPASS='<пароль SFTP>'
make deploy # hugo --minify + mirror public/ → /dedinit.ru
make deploy-dry-run # симуляция деплоя
make build # только сборка
make help # все команды
```
- `public/`, `.venv/`, `.hermes/` — в git не попадают (.gitignore).
- Пароль SFTP в открытом виде в репозиторий НЕ коммитить
(winscp_script.txt с паролем был вынесен из корня — см. `tools/`).
## Git
- Ветка `main`, источник истины — gitverse.ru, пуши через SSH
(`git@gitverse.ru:kpa39l/dedinit.ru.git`).
- Gitea (bigbox) — pull-mirror, туда отдельно не пушить.
- Коммиты — короткие, по смыслу изменений.
- Секреты и пароли в коммиты не добавлять.
## Процессы и планирование
- Планирование изменений — OpenSpec: `openspec/` (specs + changes).
Правки контента/кода — через openspec-скиллы из `.hermes/skills/`
(propose → design → apply → archive).
- Проверочные действия перед этапами: `hugo version`, `make build`,
контроль `hugo.toml`, `make deploy-dry-run`.
## Обязательные проверки перед публикацией статьи
1. `date` НЕ в будущем (иначе Hugo молча не публикует, без предупреждения).
2. `make build` проходит без ошибок.
3. Статья есть в сборке: `ls public/<год>/<slug>/index.html`,
`grep -o '<title>[^<]*</title>'`, `grep -o 'hero.svg'`.
4. `git push origin main`, затем при необходимости `make deploy`.
## Правила пользователя
- Краткие статус-отчёты на русском языке.
- Тихие watchdog'и: уведомлять только при реальной проблеме.
- НЕ удалять и не перезаписывать данные пользователя без явного подтверждения.
- Перед действиями — читать доки проекта (STATUS/PRD/WALKTHROUGH/TODO.md, openspec) и прошлые сессии.
+4 -4
View File
@@ -13,7 +13,7 @@ else
# Венв .venv создаётся автоматически таргетом venv (нужен paramiko). # Венв .venv создаётся автоматически таргетом venv (нужен paramiko).
DEPLOY_CMD = .venv/bin/python tools/deploy_sftp.py DEPLOY_CMD = .venv/bin/python tools/deploy_sftp.py
DRYRUN_CMD = .venv/bin/python tools/deploy_sftp.py --dry-run DRYRUN_CMD = .venv/bin/python tools/deploy_sftp.py --dry-run
# Пароль берётся из переменной окружения SSHPASS (см. README.md / DEPLOY_INSTRUCTIONS.md) # Пароль берётся из переменной окружения SSHPASS (см. README.md / docs/DEPLOY_INSTRUCTIONS.md)
endif endif
.PHONY: build deploy deploy-dry-run clean rebuild help venv .PHONY: build deploy deploy-dry-run clean rebuild help venv
@@ -27,7 +27,7 @@ deploy: build venv
ifeq ($(PLATFORM),Windows) ifeq ($(PLATFORM),Windows)
$(DEPLOY_CMD) $(DEPLOY_CMD)
else else
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md"; exit 1) @test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / docs/DEPLOY_INSTRUCTIONS.md"; exit 1)
$(DEPLOY_CMD) $(DEPLOY_CMD)
endif endif
@@ -36,7 +36,7 @@ ifeq ($(PLATFORM),Windows)
@echo "Выполняем проверку соединения с сервером..." @echo "Выполняем проверку соединения с сервером..."
$(DRYRUN_CMD) $(DRYRUN_CMD)
else else
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md"; exit 1) @test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / docs/DEPLOY_INSTRUCTIONS.md"; exit 1)
$(DRYRUN_CMD) $(DRYRUN_CMD)
endif endif
@@ -66,4 +66,4 @@ help:
@echo " make help - показать это сообщение" @echo " make help - показать это сообщение"
@echo "" @echo ""
@echo "Деплой: export SSHPASS='<пароль SFTP>'; make deploy" @echo "Деплой: export SSHPASS='<пароль SFTP>'; make deploy"
@echo "Пароль хранится в DEPLOY_INSTRUCTIONS.md (winscp_script.txt для Windows)." @echo "Пароль хранится в docs/DEPLOY_INSTRUCTIONS.md (winscp_script.txt для Windows)."
+46 -91
View File
@@ -1,100 +1,55 @@
# dedinit.ru # dedinit.ru
## Описание проекта **dedinit.ru** — блог на генераторе статических сайтов [Hugo](https://gohugo.io)
(extended) с кастомной темой **rDedInit** (форк [PaperMod](https://github.com/adityatelange/hugo-PaperMod)).
Платформа для публикации лонгридов с поддержкой блоков кода и подсветки
синтаксиса.
Этот проект представляет собой блог на основе генератора статических сайтов Hugo с темой PaperMod. Основная цель проекта - создать платформу для публикации лонгридов с поддержкой блоков кода и подсветки синтаксиса, чего не хватает в других сервисах (Telegraph, VK, Writefreely). ## Быстрый старт
## Технические детали ```bash
hugo # сборка в public/
- Генератор статических сайтов: Hugo (расширенная версия) hugo server # локальный сервер: http://localhost:1313
- Тема оформления: PaperMod (<https://github.com/adityatelange/hugo-PaperMod>) make build # сборка через Makefile (hugo --minify)
- Хранение контента: GitVerse (<gitverse.ru:kpa39l/dedinit.ru>) через SSH make deploy # сборка + деплой (требует SSHPASS)
- Настройка: bundle хранение статей
## Статус проекта
Проект находится в стадии разработки. Выполненные задачи:
- Установлена Hugo расширенная версия (0.155.1)
- Создан новый сайт dedinit.ru
- Установлена и настроена тема PaperMod
- Настроено bundle хранение статей
- Решена проблема совместимости Hugo и темы PaperMod
- Репозиторий подключён к GitVerse (gitverse.ru:kpa39l/dedinit.ru)
- **Создана собственная тема rDedInit** на базе PaperMod
## История изменений
### 30 августа 2026 года
- Написана и опубликована статья «Как я перевёл aux-задачи Hermes на локальные модели» (пост `20260830 - local aux models hermes`, slug `local-aux-models-hermes-qwen3`)
- Исправлена сборка с современными версиями Hugo: добавлен `defaultContentLanguage = 'ru'` в hugo.toml (Hugo 0.123+ требует, чтобы defaultContentLanguage совпадал с одним из `[languages]`, иначе ошибка `config value "en" does not match any language definition`)
- Установлен локальный git identity в репозитории: Storozhenko Evgeny <kpa39l@yandex.ru>
- Подробный опыт настройки локальных aux-моделей Hermes задокументирован в [docs/local-aux-models.md](docs/local-aux-models.md)
### 31 января 2026 года
- Установлена Hugo расширенная версия 0.155.1
- Создан новый сайт dedinit.ru
- Установлена тема PaperMod
- Настроено bundle хранение статей
- Создан пример статьи в формате bundle
- Настроена интеграция с Gitea сервером
### 5 марта 2026 года
- Миграция репозитория на GitVerse (gitverse.ru:kpa39l/dedinit.ru)
### 1 февраля 2026 года
- Разработано решение для деплоя сайта через SFTP
- Настроен Makefile для кроссплатформенного деплоя (Windows/Linux/macOS)
- Создан скрипт winscp_script.txt для подключения и синхронизации файлов
- Обновлены инструкции по деплою в DEPLOY_INSTRUCTIONS.md и README.md
## Принятые технические решения
1. **Выбор Hugo**: Выбран генератор статичных сайтов Hugo для быстродействия и гибкости
2. **Расширенная версия Hugo**: Используется расширенная версия для поддержки SCSS
3. **Тема PaperMod**: Легкая и адаптивная тема с поддержкой темной/светлой темы
4. **Bundle хранение статей**: Используется формат bundle (папка с index.md) для удобного хранения статьи и связанных файлов
5. **Хранение на GitVerse**: Контент хранится на GitVerse для полного контроля
6. **SSH подключение**: Используется SSH для безопасного доступа к репозиторию
7. **Структура проекта**: Правильная иерархия папок с .gitignore для исключения ненужных файлов
## Запуск проекта
Для генерации сайта и просмотра его в браузере используйте следующие команды:
- `hugo` - генерирует статический сайт в папку `public`
- `hugo server` - запускает локальный сервер для предварительного просмотра сайта в браузере (обычно доступен по адресу <http://localhost:1313>)
## Деплой сайта
> **ЕДИНСТВЕННЫЙ способ деплоя сайта — `make deploy`.** Не деплойте вручную
> (rsync/ssh-exec напрямую не работают: аккаунт Jino SFTP-only).
Специальные файлы:
- `Makefile` — команды сборки и публикации (Unix: SFTP через `tools/deploy_sftp.py`
на paramiko; Windows: WinSCP.com)
- `tools/deploy_sftp.py` — рекурсивный mirror `public/` → `/dedinit.ru`
(с удалением лишнего, как `rsync --delete`), пароль из env `SSHPASS`
- `winscp_script.txt` — скрипт для WinSCP (Windows)
- `DEPLOY_INSTRUCTIONS.md` — инструкция по деплою
Для публикации сайта на хостинге:
```shell
export SSHPASS='<пароль SFTP из DEPLOY_INSTRUCTIONS.md>'
make deploy
``` ```
Первая сборка создаст `.venv/` (paramiko). Для получения полного списка команд: **ЕДИНСТВЕННЫЙ способ деплоя — `make deploy`.** Не заменять на rsync/ssh-exec:
аккаунт хостинга SFTP-only. Подробности — в `docs/DEPLOY_INSTRUCTIONS.md`.
```shell ## Структура
make help
```
dedinit.ru/
├── content/posts/ # Статьи блога (bundle: папка с index.md + hero.svg)
├── themes/rDedInit/ # Кастомная тема на базе PaperMod
├── static/ # Статические ресурсы (favicon и т.д.)
├── docs/ # ВСЯ документация проекта
├── tools/ # Скрипты деплоя (deploy_sftp.py, winscp_script.txt)
├── hugo.toml # Конфигурация Hugo
├── Makefile # Сборка и деплой
├── README.md # Краткое введение (этот файл)
└── AGENTS.md # Правила работы для агентов
``` ```
Процесс кроссплатформенный: на Unix — SFTP (paramiko), на Windows — WinSCP.com. ## Документация
НЕ удаляйте `make deploy` и не заменяйте его на прямой rsync.
Вся подробная документация — в каталоге [`docs/`](docs/):
| Документ | О чём |
|----------|-------|
| [DEPLOY_INSTRUCTIONS.md](docs/DEPLOY_INSTRUCTIONS.md) | Деплой через SFTP (kpa39l.myjino.ru:2222) |
| [ROADMAP.md](docs/ROADMAP.md) | Дорожная карта проекта |
| [PAPERMOD_PARAMS.md](docs/PAPERMOD_PARAMS.md) | Справочник параметров темы rDedInit |
| [QWEN.md](docs/QWEN.md) | Настройки взаимодействия и описание проекта |
| [gitea-setup.md](docs/gitea-setup.md) | Интеграция с Gitea |
| [Telegram_frontend.md](docs/Telegram_frontend.md) | Оформление Telegram-постов |
| [favicon-logo-setup.md](docs/favicon-logo-setup.md) | Настройка favicon и логотипа |
| [local-aux-models.md](docs/local-aux-models.md) | Опыт: локальные aux-модели Hermes |
| [archive/](docs/archive/) | Архив устаревших документов |
## Конвенции
- Ветка `main`; источник истины — [gitverse.ru](https://gitverse.ru) (`kpa39l/dedinit.ru`), Gitea — pull-mirror.
- Правила работы для агентов — [`AGENTS.md`](AGENTS.md).
- Планирование изменений — OpenSpec (`openspec/`).
+6 -6
View File
@@ -172,13 +172,13 @@ metaDataFormat = "yaml"
| Файл | Описание | | Файл | Описание |
|------|----------| |------|----------|
| README.md | Основное описание проекта | | README.md | Основное описание проекта (кратко) |
| ROADMAP.md | Дорожная карта развития | | docs/ROADMAP.md | Дорожная карта развития |
| PAPERMOD_PARAMS.md | Справочник параметров темы | | docs/PAPERMOD_PARAMS.md | Справочник параметров темы |
| DEPLOY_INSTRUCTIONS.md | Инструкция по деплою | | docs/DEPLOY_INSTRUCTIONS.md | Инструкция по деплою |
| gitea-setup.md | Настройка интеграции с Gitea | | docs/gitea-setup.md | Настройка интеграции с Gitea |
| docs/favicon-logo-setup.md | Настройка favicon и логотипа | | docs/favicon-logo-setup.md | Настройка favicon и логотипа |
| Telegram_frontend.md | Оформление Telegram-постов | | docs/Telegram_frontend.md | Оформление Telegram-постов |
--- ---
View File
+2 -2
View File
@@ -4,7 +4,7 @@
Используется командой `make deploy` (единственный способ деплоя сайта). Используется командой `make deploy` (единственный способ деплоя сайта).
Jino-аккаунт kpa39l_dedinit — SFTP-only: удалённый exec (rsync/ssh) запрещён, Jino-аккаунт kpa39l_dedinit — SFTP-only: удалённый exec (rsync/ssh) запрещён,
поэтому заливаем через SFTP с рекурсивным mirror и --delete (как rsync). поэтому заливаем через SFTP с рекурсивным mirror и --delete (как rsync).
Пароль — из env SSHPASS (см. README.md / DEPLOY_INSTRUCTIONS.md). Пароль — из env SSHPASS (см. README.md / docs/DEPLOY_INSTRUCTIONS.md).
""" """
import os import os
import stat as stmod import stat as stmod
@@ -25,7 +25,7 @@ REMOTE = os.environ.get("DEDINIT_REMOTE", "/dedinit.ru")
DRYRUN = "--dry-run" in sys.argv DRYRUN = "--dry-run" in sys.argv
if not PASS: if not PASS:
print("ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md", file=sys.stderr) print("ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / docs/DEPLOY_INSTRUCTIONS.md", file=sys.stderr)
sys.exit(1) sys.exit(1)
LOCAL = os.path.abspath(LOCAL) LOCAL = os.path.abspath(LOCAL)