diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 0959651..3a020db 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -3,7 +3,7 @@ name: deploy-preland # После коммита в main — заливка преленда на хостинги всех целей (FTP с TLS) и проверка страницы каждой цели. # Цель — домен со своим хостингом (список — matrix ниже): реквизиты — секреты репозитория _FTP_HOST, # _FTP_USER, _FTP_PASS (порт 21). Цели независимы: сбой одного хостинга остальные не останавливает. -# Заливаются файлы репозитория (git ls-files), кроме служебных (.gitea/, README.md, .gitignore) и тех, что живут +# Заливаются файлы репозитория (git ls-files), кроме служебных (.gitea/, README.md, AGENTS.md, CLAUDE.md, .gitignore) и тех, что живут # только на хостинге: config.json (в git его нет) и requisites.html (реквизиты заполняют на месте — пустой файл # из git их бы затёр). На хостинге ничего не удаляется: удалённое из репозитория убирать вручную. @@ -58,7 +58,7 @@ jobs: netrc=$(mktemp); list=$(mktemp) trap 'rm -f "$netrc" "$list"' EXIT printf 'machine %s login %s password %s\n' "$FTP_HOST" "$FTP_USER" "$FTP_PASS" > "$netrc" - git ls-files | grep -vE '^(\.gitea/|README\.md$|\.gitignore$|config\.json$|requisites\.html$)' > files.txt + git ls-files | grep -vE '^(\.gitea/|README\.md$|AGENTS\.md$|CLAUDE\.md$|\.gitignore$|config\.json$|requisites\.html$)' > files.txt # имя уходит в адрес ftp:// как есть — пробелы и прочее экранирование не поддерживаем if grep -q '[^A-Za-z0-9._/-]' files.txt; then echo "имена с недопустимыми символами:"; grep '[^A-Za-z0-9._/-]' files.txt; exit 1; fi # один curl на все файлы — одно соединение FTP+TLS вместо соединения на файл diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..ea912ae --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,33 @@ +# Инструкции агентов для `preland` + +Область действия — репозиторий `preland/`. Общие правила рабочей области находятся в +[AGENTS.md](../AGENTS.md) и [CLAUDE.md](../CLAUDE.md); канонический процесс и каталог ролей — +[в общей политике](../.known-base/Соглашения/Процесс%20командной%20разработки%20и%20каталог%20ролей.md). +Этот файл и [CLAUDE.md](CLAUDE.md) содержат одинаковые локальные правила; обновлять их вместе. + +## Перед работой + +- Прочитать [README.md](README.md), [заметку проекта](../.known-base/Проекты/Преленд%20—%20anton-preland.md), + а для выката — `.gitea/workflows/deploy.yml` и `config.json.example`. +- Проверить состояние ветки и чужие изменения в `preland/`; изменения API сайта согласовать + с его контрактом и инструкциями `api/`. + +## Локальные ограничения + +- Преленд — PHP без фреймворка и сборки; `Yii::t` реализован локальной заглушкой `i18n.php`. + Сохранять существующие компоненты и передачу меток трафика на сайт. +- Загрузка идёт на `POST /api/images/public/create` с `file` и случайным `client_key`, + переход — через `/api/images/public/claim?key=…`. Ключ одноразовый, срок 30 минут; + переход напрямую на `/public/upscale` не заменяет передачу владельца через claim. +- `host` задаёт сайт назначения; HTTPS необходим для `crypto.randomUUID()`. + Не обходить серверные правила доступа к загрузке и результату обработки. +- Рабочий `config.json` каждой цели и `requisites.html` живут на хостинге: не добавлять + их в git, не перезаписывать и не удалять при деплое. В репозитории — только образец конфига. +- Коммит в `main` запускает FTP-автодеплой на все цели workflow; откат через `git revert` + также запускает выкат. Коммит, push и изменения хостинга — только по прямому поручению. +- Проверки кода и браузера проводить в Docker без установки ПО на хост. + Проверка загрузки по боевому адресу вызывает реальную обработку; выполнять её только + в согласованном окружении, не публиковать ключи загрузок и FTP-секреты. + +План, журнал и база знаний ведутся в корне рабочей области по общим правилам. Ссылки на +политику и документацию не подключают MCP и не дают разрешения на публикацию или выкат. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..e353f51 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,33 @@ +# Инструкции агентов для `preland` + +Область действия — репозиторий `preland/`. Общие правила рабочей области находятся в +[AGENTS.md](../AGENTS.md) и [CLAUDE.md](../CLAUDE.md); канонический процесс и каталог ролей — +[в общей политике](../.known-base/Соглашения/Процесс%20командной%20разработки%20и%20каталог%20ролей.md). +Этот файл и [AGENTS.md](AGENTS.md) содержат одинаковые локальные правила; обновлять их вместе. + +## Перед работой + +- Прочитать [README.md](README.md), [заметку проекта](../.known-base/Проекты/Преленд%20—%20anton-preland.md), + а для выката — `.gitea/workflows/deploy.yml` и `config.json.example`. +- Проверить состояние ветки и чужие изменения в `preland/`; изменения API сайта согласовать + с его контрактом и инструкциями `api/`. + +## Локальные ограничения + +- Преленд — PHP без фреймворка и сборки; `Yii::t` реализован локальной заглушкой `i18n.php`. + Сохранять существующие компоненты и передачу меток трафика на сайт. +- Загрузка идёт на `POST /api/images/public/create` с `file` и случайным `client_key`, + переход — через `/api/images/public/claim?key=…`. Ключ одноразовый, срок 30 минут; + переход напрямую на `/public/upscale` не заменяет передачу владельца через claim. +- `host` задаёт сайт назначения; HTTPS необходим для `crypto.randomUUID()`. + Не обходить серверные правила доступа к загрузке и результату обработки. +- Рабочий `config.json` каждой цели и `requisites.html` живут на хостинге: не добавлять + их в git, не перезаписывать и не удалять при деплое. В репозитории — только образец конфига. +- Коммит в `main` запускает FTP-автодеплой на все цели workflow; откат через `git revert` + также запускает выкат. Коммит, push и изменения хостинга — только по прямому поручению. +- Проверки кода и браузера проводить в Docker без установки ПО на хост. + Проверка загрузки по боевому адресу вызывает реальную обработку; выполнять её только + в согласованном окружении, не публиковать ключи загрузок и FTP-секреты. + +План, журнал и база знаний ведутся в корне рабочей области по общим правилам. Ссылки на +политику и документацию не подключают MCP и не дают разрешения на публикацию или выкат.