From db95de0ddf45421fac491b704c4309b50be556e8 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 08:01:46 +0300 Subject: [PATCH] Update AGENTS.md with new task documentation and enhance Russian and English localization for portrait settings. --- .claude/skills/side-work/SKILL.md | 70 ++++++++++++++++++++++++++ AGENTS.md | 1 + src/HSchool.Client/src/i18n/strings.ts | 14 ++++++ 3 files changed, 85 insertions(+) create mode 100644 .claude/skills/side-work/SKILL.md diff --git a/.claude/skills/side-work/SKILL.md b/.claude/skills/side-work/SKILL.md new file mode 100644 index 0000000..76a1026 --- /dev/null +++ b/.claude/skills/side-work/SKILL.md @@ -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/.md`. «Вне очереди» номер не занимает. + +Номер фазы: максимум по `docs/phases/*.md` и индексу, плюс один, затем +`git branch --list "phase/-*"`. Занято — следующий. Гонку ловят ветки, не +индекс: у новой фазы на `main` строки ещё нет. + +## 3. Документы + +Как у соседней фазы, не новый жанр. Каркас тот же: Зависимости, Зачем, Задачи, +Тесты без которых фаза не закрыта, Критерий готовности, Стоп. + +«Тесты…» — контракт для `/phase-review`: каждый пункт станет отдельным тестом +по Testing policy в `AGENTS.md`. Дизайн: зачем; «Было / Стало / Почему», если +меняется принятое; что не входит. Индекс — новая строка, статус ⬜. Новый срез, +куда ходят люди — строка в Orientation `AGENTS.md`. + +Протокол, HTTP, сейв — назвать явно. Версию не бампать: это коммит с кодом. + +Покажи срез, фазы и Стоп. Просил только документы — здесь конец. Просил сделать +— сразу шаг 4. + +## 4. Работа + +Прочитай [phase-work](../phase-work/SKILL.md) и следуй ему. + +Отличия: фазу ты завёл сам; заявка `git branch phase/-` **до** кода; +новые файлы и 🔄 живут на этой ветке. Один цикл — одна фаза. «Сделай всё» — +по порядку, каждая своим циклом `/phase-work`. Три фазы в одну ветку не паковать. + +## Отчёт + +Форма и куда легли документы; фаза и ветка; тесты списком; что прогнал; что +осталось ⬜; слита ли ветка в `main`. diff --git a/AGENTS.md b/AGENTS.md index df500bf..f9adb9c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 38–39 | | 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 41–47 | +| a task that is not in any slice | `.claude/skills/side-work` — discuss, document in «Вне очереди» or a new named slice, then implement | ## Commands diff --git a/src/HSchool.Client/src/i18n/strings.ts b/src/HSchool.Client/src/i18n/strings.ts index ddf05da..974f306 100644 --- a/src/HSchool.Client/src/i18n/strings.ts +++ b/src/HSchool.Client/src/i18n/strings.ts @@ -96,6 +96,7 @@ const ru = { errorInvalidCatalog: 'Не удалось загрузить выбранные моды.', errorUnknownCountry: 'Выбранная страна не найдена.', errorUnknownNativeLanguage: 'Выбранный родной язык не входит в эту страну.', + errorInvalidPortraitSettings: 'Пресеты портретов этой школы заданы неверно.', catalogLoadFailed: 'Не удалось загрузить каталог модов.', modsTitle: 'Моды', @@ -108,6 +109,10 @@ const ru = { editMap: 'Редактировать карту', mapDefaultHint: 'Будет использована карта по умолчанию.', mapEditedHint: 'Карта изменена.', + portraitPresets: 'Пресеты портретов', + editPortraitPresets: 'Настроить модели', + portraitPresetsHint: 'Модель и промпты сохранятся в этой школе.', + portraitPresetsEdited: 'Заданы для этой школы.', schoolSeed: 'Сид {seed}', schoolSeedLabel: 'Сид', schoolSeedHint: 'Необязательно. Чужой сид даёт ту же школу; пустое поле бросает свой.', @@ -444,6 +449,7 @@ const en: Messages = { errorInvalidCatalog: 'The selected packs could not be loaded.', errorUnknownCountry: 'The selected country is not in the catalog.', 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.', modsTitle: 'Mods', @@ -456,6 +462,14 @@ const en: Messages = { editMap: 'Edit map', mapDefaultHint: 'The default map will be used.', 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}', schoolSeedLabel: 'Seed', schoolSeedHint: 'Optional. A shared seed recreates the same people; leave blank to roll one.',