Update AGENTS.md with new task documentation and enhance Russian and English localization for portrait settings.
ci / server (push) Failing after 1m16s
ci / client (push) Failing after 13s

This commit is contained in:
Leonid Pershin
2026-08-20 08:01:46 +03:00
parent 6264034e4b
commit db95de0ddf
3 changed files with 85 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
---
name: side-work
description: >-
Обсуждает задачу вне запланированных срезов, пишет под неё фазы и делает на
отдельной ветке. Используй при «сделай отдельно», «вне среза», «отдельная
задача», «не из фаз», «side-work», «обсуди и сделай». Не для «сделай фазу N»
(/phase-work) и не для ревью (/phase-review).
---
# Отдельная задача вне среза
Задачи нет в индексе — и в уже стоящие срезы она не дописывается. Сначала
согласовать форму, потом документы в **своём** срезе, потом код как у
`/phase-work`. Код до документов не писать.
«Обсуди и сделай» — идти до конца после короткого согласования. Стоп, только
если выбор меняет протокол, сейв или инвариант.
## 1. Обсуждение
Прочитай `docs/phases/README.md`, инварианты в `AGENTS.md` и затронутые
дизайн-доки. Это уже чья-то фаза в индексе — скажи и отдай `/phase-work`.
Два–пять вопросов, два–три варианта, **рекомендация обязательна**. Спросить
только форму: что увидит игрок; протокол / HTTP / сейв; какой инвариант; одна
фаза или несколько, и можно ли остановиться посередине целой школой.
«Ок», «делай», «как рекомендуешь» — согласие. Молчание — нет. Соседнее «заодно»
в отчёт, не в объём.
## 2. Куда класть
**Мелкое** (баг, дырка, одна кнопка) — фаза в секции **«Вне очереди»** в конце
индекса. Это срез без номера, чтобы не спорить со срезом 10. Дизайн — `##` в
`docs/design/off-queue.md`; файла нет — заведи с заголовком, зачем он.
**Крупное** (этапы, остановка посередине, новый кусок игры) — именованный срез
со следующим номером и `docs/design/<slug>.md`. «Вне очереди» номер не занимает.
Номер фазы: максимум по `docs/phases/*.md` и индексу, плюс один, затем
`git branch --list "phase/<N>-*"`. Занято — следующий. Гонку ловят ветки, не
индекс: у новой фазы на `main` строки ещё нет.
## 3. Документы
Как у соседней фазы, не новый жанр. Каркас тот же: Зависимости, Зачем, Задачи,
Тесты без которых фаза не закрыта, Критерий готовности, Стоп.
«Тесты…» — контракт для `/phase-review`: каждый пункт станет отдельным тестом
по Testing policy в `AGENTS.md`. Дизайн: зачем; «Было / Стало / Почему», если
меняется принятое; что не входит. Индекс — новая строка, статус ⬜. Новый срез,
куда ходят люди — строка в Orientation `AGENTS.md`.
Протокол, HTTP, сейв — назвать явно. Версию не бампать: это коммит с кодом.
Покажи срез, фазы и Стоп. Просил только документы — здесь конец. Просил сделать
— сразу шаг 4.
## 4. Работа
Прочитай [phase-work](../phase-work/SKILL.md) и следуй ему.
Отличия: фазу ты завёл сам; заявка `git branch phase/<N>-<slug>` **до** кода;
новые файлы и 🔄 живут на этой ветке. Один цикл — одна фаза. «Сделай всё» —
по порядку, каждая своим циклом `/phase-work`. Три фазы в одну ветку не паковать.
## Отчёт
Форма и куда легли документы; фаза и ветка; тесты списком; что прогнал; что
осталось ⬜; слита ли ветка в `main`.
+1
View File
@@ -24,6 +24,7 @@ way; this file is *how to work in them*.
| login, who owns a school, watching others | [`docs/design/session.md`](docs/design/session.md) — slice 8, phases 3839 | | login, who owns a school, watching others | [`docs/design/session.md`](docs/design/session.md) — slice 8, phases 3839 |
| clock speed buttons and high-speed stride | `src/HSchool.Simulation/ClockSpeed.cs` **and** [`docs/design/session.md`](docs/design/session.md) — phase 40 | | clock speed buttons and high-speed stride | `src/HSchool.Simulation/ClockSpeed.cs` **and** [`docs/design/session.md`](docs/design/session.md) — phase 40 |
| talks, opinions, fights, romance pack | [`docs/design/social.md`](docs/design/social.md) — slice 9, phases 4147 | | talks, opinions, fights, romance pack | [`docs/design/social.md`](docs/design/social.md) — slice 9, phases 4147 |
| a task that is not in any slice | `.claude/skills/side-work` — discuss, document in «Вне очереди» or a new named slice, then implement |
## Commands ## Commands
+14
View File
@@ -96,6 +96,7 @@ const ru = {
errorInvalidCatalog: 'Не удалось загрузить выбранные моды.', errorInvalidCatalog: 'Не удалось загрузить выбранные моды.',
errorUnknownCountry: 'Выбранная страна не найдена.', errorUnknownCountry: 'Выбранная страна не найдена.',
errorUnknownNativeLanguage: 'Выбранный родной язык не входит в эту страну.', errorUnknownNativeLanguage: 'Выбранный родной язык не входит в эту страну.',
errorInvalidPortraitSettings: 'Пресеты портретов этой школы заданы неверно.',
catalogLoadFailed: 'Не удалось загрузить каталог модов.', catalogLoadFailed: 'Не удалось загрузить каталог модов.',
modsTitle: 'Моды', modsTitle: 'Моды',
@@ -108,6 +109,10 @@ const ru = {
editMap: 'Редактировать карту', editMap: 'Редактировать карту',
mapDefaultHint: 'Будет использована карта по умолчанию.', mapDefaultHint: 'Будет использована карта по умолчанию.',
mapEditedHint: 'Карта изменена.', mapEditedHint: 'Карта изменена.',
portraitPresets: 'Пресеты портретов',
editPortraitPresets: 'Настроить модели',
portraitPresetsHint: 'Модель и промпты сохранятся в этой школе.',
portraitPresetsEdited: 'Заданы для этой школы.',
schoolSeed: 'Сид {seed}', schoolSeed: 'Сид {seed}',
schoolSeedLabel: 'Сид', schoolSeedLabel: 'Сид',
schoolSeedHint: 'Необязательно. Чужой сид даёт ту же школу; пустое поле бросает свой.', schoolSeedHint: 'Необязательно. Чужой сид даёт ту же школу; пустое поле бросает свой.',
@@ -444,6 +449,7 @@ const en: Messages = {
errorInvalidCatalog: 'The selected packs could not be loaded.', errorInvalidCatalog: 'The selected packs could not be loaded.',
errorUnknownCountry: 'The selected country is not in the catalog.', errorUnknownCountry: 'The selected country is not in the catalog.',
errorUnknownNativeLanguage: 'The selected native language is not in that country.', errorUnknownNativeLanguage: 'The selected native language is not in that country.',
errorInvalidPortraitSettings: 'This school\'s portrait presets are not valid.',
catalogLoadFailed: 'Could not load the mod catalog.', catalogLoadFailed: 'Could not load the mod catalog.',
modsTitle: 'Mods', modsTitle: 'Mods',
@@ -456,6 +462,14 @@ const en: Messages = {
editMap: 'Edit map', editMap: 'Edit map',
mapDefaultHint: 'The default map will be used.', mapDefaultHint: 'The default map will be used.',
mapEditedHint: 'The map has been edited.', mapEditedHint: 'The map has been edited.',
portraitPresets: 'Portrait presets',
editPortraitPresets: 'Configure models',
portraitPresetsHint: 'The model and prompts will be stored with this school.',
portraitPresetsEdited: 'Set for this school.',
portraitPresets: 'Portrait presets',
editPortraitPresets: 'Configure models',
portraitPresetsHint: 'The model and prompts will be stored with this school.',
portraitPresetsEdited: 'Set for this school.',
schoolSeed: 'Seed {seed}', schoolSeed: 'Seed {seed}',
schoolSeedLabel: 'Seed', schoolSeedLabel: 'Seed',
schoolSeedHint: 'Optional. A shared seed recreates the same people; leave blank to roll one.', schoolSeedHint: 'Optional. A shared seed recreates the same people; leave blank to roll one.',