From 9a6cbff55a0440ff8521ddf7681a7a92c9fadf1c Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 12:26:21 +0300 Subject: [PATCH] Update AGENTS.md and various SKILL.md files to improve documentation structure, clarify design phase references, and ensure consistency in file paths. Adjust links to design documents for better navigation and organization across phases. --- .claude/skills/bug-work/SKILL.md | 4 +-- .claude/skills/phase-orch/SKILL.md | 14 ++++---- .claude/skills/phase-orch/worker-prompt.md | 21 ++++++------ .claude/skills/phase-review/SKILL.md | 14 ++++---- .claude/skills/phase-work/SKILL.md | 27 +++++++++------- .claude/skills/side-work/SKILL.md | 32 +++++++++++-------- .claude/skills/slice-work/SKILL.md | 31 ++++++++++-------- AGENTS.md | 16 ++++++---- docs/bugs/README.md | 2 +- docs/design/08-session/session.md | 2 +- docs/phases/01-shell/01-manager-shell.md | 2 +- docs/phases/01-shell/README.md | 8 ++--- docs/phases/02-people/06-people-generator.md | 2 +- docs/phases/02-people/08-people-browser.md | 2 +- docs/phases/02-people/README.md | 2 +- docs/phases/03-staffing/README.md | 2 +- docs/phases/04-schedule/README.md | 2 +- docs/phases/05-ai/README.md | 2 +- docs/phases/06-foundation/22-mod-identity.md | 2 +- docs/phases/06-foundation/23-example-pack.md | 2 +- .../06-foundation/24-behavior-numbers.md | 2 +- docs/phases/06-foundation/26-school-seed.md | 2 +- docs/phases/06-foundation/README.md | 2 +- docs/phases/07-inventory/30-apparel-defs.md | 2 +- docs/phases/07-inventory/37-school-rules.md | 2 +- docs/phases/07-inventory/README.md | 2 +- docs/phases/08-session/README.md | 2 +- docs/phases/09-social/README.md | 2 +- docs/phases/10-craft/README.md | 2 +- docs/phases/off-queue/README.md | 4 +-- 30 files changed, 116 insertions(+), 95 deletions(-) diff --git a/.claude/skills/bug-work/SKILL.md b/.claude/skills/bug-work/SKILL.md index 55fa9e4..742bc19 100644 --- a/.claude/skills/bug-work/SKILL.md +++ b/.claude/skills/bug-work/SKILL.md @@ -18,8 +18,8 @@ description: >- ## Когда это, а когда нет -Прочитай `docs/bugs/README.md`, `docs/phases/README.md` и инварианты в -`AGENTS.md`. +Прочитай `docs/bugs/README.md` и инварианты в `AGENTS.md`. Оглавление фаз +(`docs/phases/README.md`) — только если нужно отличить баг от открытой ⬜. - Уже стоит ⬜/🔄 в индексе багов — бери его, не заводи второй. - Это ещё не сделанная фаза в `docs/phases/` — скажи и отдай `/phase-work`. diff --git a/.claude/skills/phase-orch/SKILL.md b/.claude/skills/phase-orch/SKILL.md index 92916b8..0ff098f 100644 --- a/.claude/skills/phase-orch/SKILL.md +++ b/.claude/skills/phase-orch/SKILL.md @@ -50,9 +50,10 @@ N — **одновременные** агенты, не «запусти N и з ## Старт -1. Прочитай `docs/phases/README.md` и `docs/phases/reviewed.md`. Если IDE не - на `main` — статусы с `git show main:docs/phases/README.md`, не с рабочей - копии (там может быть чужой 🔄 из бага). +1. Оглавление `docs/phases/README.md` (каталог). Открытые ⬜: + `rg "⬜" docs/phases/*/README.md` — читай только эти индексы, не все. + Ревьюеру — только `docs/phases//reviewed.md`, не сводку всех срезов. + Если IDE не на `main` — статусы с `git show main:docs/phases//README.md`. 2. Посчитай, сколько ⬜ с **закрытыми** зависимостями (шапка фазы). 🔄 не бери как новый захват. 3. Проверь `git branch --list "phase/*"` и `review/*` — заявка уже стоит. @@ -88,8 +89,9 @@ N — **одновременные** агенты, не «запусти N и з не сажай `/bug-work` в слот. Параллельные разработчики не должны править одни файлы без нужды. В промпте -назови соседа и стоп-границу фазы. Общие `docs/phases/README.md`, -`docs/protocol.md`, `AGENTS.md` — точечно. +назови соседа и стоп-границу фазы. Общие `docs/phases//README.md`, +`docs/protocol.md`, `AGENTS.md` — точечно. Каталог `docs/phases/README.md` +трогай только когда появляется новый срез. ## На уведомлении агента @@ -138,7 +140,7 @@ N — **одновременные** агенты, не «запусти N и з `stash push -u` **своего** ярлыка, merge, pop только его. Конфликт pop — оставить stash, не форсировать. **Не** stash’ать незакоммиченное живого worktree соседа. -- Конфликт README: обе стороны (пришедший ✅ и чужие 🔄/✅). +- Конфликт индекса среза: обе стороны (пришедший ✅ и чужие 🔄/✅). - `protocol.md`: оставить все блоки (сессия + карточка + темп), не бампить версию чужой фазы. - После merge: `branch -d` (не `-D`), снять lock, worktree remove. diff --git a/.claude/skills/phase-orch/worker-prompt.md b/.claude/skills/phase-orch/worker-prompt.md index e7daa68..38af619 100644 --- a/.claude/skills/phase-orch/worker-prompt.md +++ b/.claude/skills/phase-orch/worker-prompt.md @@ -21,10 +21,11 @@ Memory — один раз или без неё; stash с пометкой portr Репо: <корень>. Сливать только в основном дереве, и только если оно уже на main (не checkout ветки пользователя bug/…). -Фаза: docs/phases/<файл>.md -Дизайн среза: docs/design/<файл>.md +Фаза: docs/phases//<файл>.md +Дизайн среза: docs/design//<файл>.md Инварианты: AGENTS.md -Индекс: docs/phases/README.md — эта фаза сейчас ⬜. +Индекс: docs/phases//README.md — эта фаза сейчас ⬜. +Чужие срезы, сводку reviewed.md и оглавление дальше таблицы не читать. Соседи (🔄 / параллельно): <номера и чего не трогать>. Стоп фазы: <из её файла>. @@ -32,10 +33,10 @@ Windows Vitest: при падении параллели — `--maxWorkers=1`. Застолбить до кода: 1. git branch --list "phase/-*" — пусто, иначе стоп (это чужой захват). - Занятость: `git show main:docs/phases/README.md`, не рабочую копию IDE. + Занятость: `git show main:docs/phases//README.md`, не рабочую копию IDE. 2. git branch phase/- main От **main**, не от HEAD (HEAD часто bug/…). Не checkout основного дерева. -3. 🔄 в README **на main**, отдельный коммит только этой строки. +3. 🔄 в индексе среза **на main**, отдельный коммит только этой строки. Дерево уже на main — коммить там. Иначе: worktree add /wt-claim-main main, коммит там, worktree remove. В bug/… не коммить и не revert чужое. 4. git worktree add /wt-phase- phase/- @@ -46,15 +47,15 @@ Windows Vitest: при падении параллели — `--maxWorkers=1`. Задачи и обязательные тесты — как в файле фазы целиком. Гоняй только проект(ы) из Testing policy в AGENTS.md, `--filter` на новый класс. Весь solution не гонять. -Общие файлы (README фаз, protocol.md, AGENTS.md) — точечно. +Общие файлы (индекс среза, protocol.md, AGENTS.md) — точечно. Каталог срезов не трогать. HTTP/протокол — docs/protocol.md тем же коммитом; версию сокета не бампить, если фаза этого не требует. Слияние по скиллу: убрать worktree, merge/lock (общий: фаза/баг/ревью/side; -чужой — ждать, не снимать), merge --no-ff, конфликт README — обе стороны. +чужой — ждать, не снимать), merge --no-ff, конфликт индекса среза — обе стороны. Грязный main или дерево не на main — не сливать, не checkout, снять lock, отчёт. Stash сам не делай. -✅ в README — последним коммитом ветки, только строка статуса. +✅ в индексе среза — последним коммитом ветки, только строка статуса. Не сливай чужие ветки. Отчёт: фаза и ветка; задачи; тесты списком; какой проект прогнал; незакрытое; слита ли. @@ -106,7 +107,7 @@ phase-work; stash — только если ниже явно сказано, ч <или:> Грязный main — не stash, снять lock, отчёт. -Конфликт README — обе стороны. protocol.md — не выкидывать чужие блоки. +Конфликт индекса среза — обе стороны. protocol.md — не выкидывать чужие блоки. После успеха: branch -d (не -D), снять lock, worktree remove. Не пушь. HSchool.Server не убивай. Весь solution не гонять: конфликт только в статусе — тесты не нужны; в коде — узкий проект из Testing policy. @@ -122,7 +123,7 @@ phase-work; stash — только если ниже явно сказано, ч Следуй `.claude/skills/phase-review/SKILL.md`. Один проход — только фазы (этап среза <имя>), не весь срез и не следующий. -Свой заголовок в docs/phases/reviewed.md. Чужие разделы журнала не затирай. +Свой заголовок в docs/phases//reviewed.md. Чужие срезы не открывать. Ветка `git branch review/ main` (от main, не от HEAD). Worktree вне репо: /wt-review- — дальше только его пути. Журнал коммить в этом worktree, не в bug/… пользователя. diff --git a/.claude/skills/phase-review/SKILL.md b/.claude/skills/phase-review/SKILL.md index 75ccc59..0a11a85 100644 --- a/.claude/skills/phase-review/SKILL.md +++ b/.claude/skills/phase-review/SKILL.md @@ -1,6 +1,6 @@ --- name: phase-review -description: Ревью срезов и фаз проекта h-school по их же критериям приёмки — с дописыванием недостающих тестов, исправлением найденного и журналом проверенного в docs/phases/reviewed.md. Обязательно используй этот скилл, когда просят «сделай ревью», «проведи ревью», «проверь срез», «проверь непроверенные срезы», «что ещё не проверено», «review the slice» — и вообще при любой просьбе проверить, действительно ли сделанная фаза сделана. Не для ревью одного диффа или пул-реквеста: там нужен /code-review. Не для волны разработчиков — /phase-orch (он может запустить этот скилл как одного из агентов). Не для планирования нового среза — /slice-work. +description: Ревью срезов и фаз проекта h-school по их же критериям приёмки — с дописыванием недостающих тестов, исправлением найденного и журналом проверенного в docs/phases//reviewed.md. Обязательно используй этот скилл, когда просят «сделай ревью», «проведи ревью», «проверь срез», «проверь непроверенные срезы», «что ещё не проверено», «review the slice» — и вообще при любой просьбе проверить, действительно ли сделанная фаза сделана. Не для ревью одного диффа или пул-реквеста: там нужен /code-review. Не для волны разработчиков — /phase-orch (он может запустить этот скилл как одного из агентов). Не для планирования нового среза — /slice-work. --- # Ревью срезов @@ -16,8 +16,9 @@ description: Ревью срезов и фаз проекта h-school по их ## Журнал -`docs/phases/reviewed.md` — единственный источник правды о том, что уже проверено. Если файла -нет, создай его с заголовком и одной строкой о том, что это такое. +`docs/phases//reviewed.md` — правда о проверке **этого** среза. Сводка ссылок — +короткий `docs/phases/reviewed.md`. Чужие журналы не читать. Если файла среза нет, создай +его и добавь строку в сводку. Раздел на срез: @@ -38,8 +39,9 @@ description: Ревью срезов и фаз проекта h-school по их ## Как выбрать, что проверять -1. Прочитай `docs/phases/README.md` — там срезы, их фазы и статусы. -2. Прочитай журнал. +1. Оглавление `docs/phases/README.md` и сводка `docs/phases/reviewed.md` — только чтобы выбрать + срез. Дальше — индекс, фазы и `reviewed.md` **этой** папки, не остальные. +2. Прочитай журнал этого среза. 3. Срез попадает в очередь, если: - его нет в журнале; **или** - `git log <коммит-из-журнала>..HEAD -- <пути среза>` непустой — код менялся после проверки; @@ -80,7 +82,7 @@ description: Ревью срезов и фаз проекта h-school по их **3. «Things that will bite you».** Этот раздел `AGENTS.md` — список уже случившихся регрессий. Проверить, что ни одна не вернулась, дешевле, чем поймать её второй раз. -**4. Дизайн-док среза** (`docs/design/*.md`, ссылка есть в индексе фаз). Расхождение кода с +**4. Дизайн-док среза** (`docs/design//`, ссылка есть в индексе среза). Расхождение кода с принятым решением — находка, даже если тесты зелёные. Но сначала спроси себя, не устарел ли док: бывает, что решение сознательно поменяли, и тогда чинить надо документ. diff --git a/.claude/skills/phase-work/SKILL.md b/.claude/skills/phase-work/SKILL.md index a7a8618..f944204 100644 --- a/.claude/skills/phase-work/SKILL.md +++ b/.claude/skills/phase-work/SKILL.md @@ -22,13 +22,18 @@ description: Берёт ровно одну фазу из среза в docs/pha **Номера нет** — выбираешь сам. Волну «запусти троих» так не раздавай — это `/phase-orch`. -1. Читаешь `docs/phases/README.md`: находишь первый срез, где есть ⬜. -2. Внутри среза берёшь первую ⬜, у которой закрыты зависимости — они перечислены в шапке фазы. +1. `rg "⬜" docs/phases/*/README.md` — не читай индексы всех срезов. Оглавление + `docs/phases/README.md` — каталог папок, без таблиц фаз. +2. В первом срезе с ⬜ берёшь первую ⬜, у которой закрыты зависимости — они в шапке фазы. 3. Проверяешь, что её никто не взял: `git branch --list "phase/<номер>-*"` пусто. -**Статус в `README.md` — первый источник правды, ветка — только арбитр гонки.** 🔄 значит занято, -✅ значит сделано, ⬜ значит свободно. Ветка может существовать и при ✅ — её просто не убрали после -слияния; это не заявка, а мусор, см. «Кто убирает ветку». +Номер дали — файл `docs/phases/*/-*.md`. Читай его, `README.md` этой папки и дизайн +среза по ссылке в индексе. Чужие срезы и `reviewed.md` не открывать. + +**Статус в индексе среза (`docs/phases//README.md`) — первый источник правды, ветка — +только арбитр гонки.** 🔄 значит занято, ✅ значит сделано, ⬜ значит свободно. Ветка может +существовать и при ✅ — её просто не убрали после слияния; это не заявка, а мусор, см. +«Кто убирает ветку». Фаза 🔄 — чужая работа в процессе. Не трогай её, даже если кажется, что там застряли — кроме случая выше: номер передали и ветка уже есть, тебя посадили продолжить. @@ -49,7 +54,7 @@ git branch phase/25-golden-fixtures main Команда упала с «already exists» — значит фазу взял другой агент между твоей проверкой и попыткой. Не спорь, вернись к выбору и возьми следующую. -Ветка создалась — фаза твоя. Сразу пометь её 🔄 в `docs/phases/README.md` **на `main`**, отдельным +Ветка создалась — фаза твоя. Сразу пометь её 🔄 в `docs/phases//README.md` **на `main`**, отдельным коммитом из одной этой строки. Соседи читают занятость с `main`, а пустая свежая ветка ещё ничем не отличается от слитой — по ней одной понять, что фаза в работе, нельзя. @@ -84,10 +89,10 @@ git worktree add <путь-в-scratchpad>/wt-phase-25 phase/25-golden-fixtures Cursor workspace по умолчанию — корень IDE, не этот worktree. После `worktree add` каждый `Read` / `Write` / `StrReplace` / `Shell` идёт **абсолютным путём** (или `working_directory`) -внутрь `…/wt-phase-25`. Относительный `docs/phases/README.md` пишется в ветку, которую сейчас +внутрь `…/wt-phase-25`. Относительный `docs/phases//README.md` пишется в ветку, которую сейчас держит пользователь. `git add` / `commit` без `-C` worktree — то же самое. -Занятость чужих фаз читай так: `git show main:docs/phases/README.md` и +Занятость чужих фаз читай так: `git show main:docs/phases//README.md` и `git branch --list "phase/*"` — не рабочую копию на `bug/…`. Дальше вся работа там. В конце worktree удаляется (`git worktree remove --force`), ветка остаётся. @@ -184,7 +189,7 @@ git -C <корень> merge --no-ff phase/25-golden-fixtures `--no-ff` — чтобы фаза осталась видимой в истории одним куском, а не растворилась в линии. **5. Конфликты разрешай только те, что понимаешь.** Почти всегда это строка статуса в -`docs/phases/README.md` — там обе стороны правы, надо оставить обе. Конфликт в коде, смысл +`docs/phases//README.md` — там обе стороны правы, надо оставить обе. Конфликт в коде, смысл которого тебе неясен, — `git merge --abort`, снять замок, оставить ветку и написать в отчёте, с чем именно она не сходится. @@ -235,8 +240,8 @@ git branch --merged main --list "phase/*" --format="%(refname:short)" работай там, статус не возвращай в ⬜. - **Не меняй молча** версию протокола, форму сейва и публичное поведение API — даже когда это очевидно правильно. Если фаза этого требует, так и написано в её задачах. -- **Общие файлы трогай минимально.** `AGENTS.md`, `docs/protocol.md`, `README.md` правят все ветки - сразу — чем точечнее правка, тем дешевле слияние. +- **Общие файлы трогай минимально.** `AGENTS.md`, `docs/protocol.md` правят все ветки сразу. + Индекс — только свой `docs/phases//README.md`. Каталог срезов не трогать. ## Окружение: что укусит diff --git a/.claude/skills/side-work/SKILL.md b/.claude/skills/side-work/SKILL.md index eb9e2e1..bd61f94 100644 --- a/.claude/skills/side-work/SKILL.md +++ b/.claude/skills/side-work/SKILL.md @@ -22,10 +22,11 @@ description: >- ## 1. Обсуждение -Прочитай `docs/phases/README.md`, `docs/bugs/README.md`, инварианты в -`AGENTS.md` и затронутые дизайн-доки. Это уже чья-то фаза в индексе — скажи -и отдай `/phase-work`. Регрессия уже сделанного — `/bug-work`. Этапы, новый -кусок игры, остановка посередине целой школой — `/slice-work`. +Прочитай оглавление `docs/phases/README.md` (не индексы всех срезов), +`docs/bugs/README.md`, инварианты в `AGENTS.md` и **только** затронутый +дизайн. Это уже чья-то фаза — скажи и отдай `/phase-work`. Регрессия уже +сделанного — `/bug-work`. Этапы, новый кусок игры, остановка посередине +целой школой — `/slice-work`. Два–пять вопросов, два–три варианта, **рекомендация обязательна**. Спросить только форму: что увидит игрок; протокол / HTTP / сейв; какой инвариант; одна @@ -40,23 +41,26 @@ description: >- **Новый срез** — не этот скилл, [slice-work](../slice-work/SKILL.md). -**Мелкое** (дырка, одна кнопка, DX, склейка живых систем) — фаза в секции -**«Вне очереди»** в конце индекса. Это срез без номера, чтобы не спорить со -следующим именованным. Дизайн — `##` в `docs/design/off-queue.md`; файла нет — -заведи с заголовком, зачем он. +**Мелкое** (дырка, одна кнопка, DX, склейка живых систем) — фаза в +`docs/phases/off-queue/`. Это срез без номера, чтобы не спорить со следующим +именованным. Дизайн новой темы — **новый файл** +`docs/design/off-queue/.md`, не дописывать в чужой файл темы. Строка в +`docs/design/off-queue/README.md`. -Номер фазы: максимум по `docs/phases/*.md` и индексу, плюс один, затем -`git branch --list "phase/-*"`. Занято — следующий. Гонку ловят ветки, не -индекс: у новой фазы на `main` строки ещё нет. +Номер фазы: максимум по именам `docs/phases/*/-*.md` (не README, не +reviewed), плюс один, затем `git branch --list "phase/-*"`. Занято — +следующий. Гонку ловят ветки, не индекс: у новой фазы на `main` строки ещё нет. ## 3. Документы -Как у соседней фазы, не новый жанр. Каркас тот же: Зависимости, Зачем, Задачи, -Тесты без которых фаза не закрыта, Критерий готовности, Стоп. +Как у соседней фазы в `off-queue/`, не новый жанр. Каркас тот же: Зависимости, +Зачем, Задачи, Тесты без которых фаза не закрыта, Критерий готовности, Стоп. +Файл — `docs/phases/off-queue/-.md`. «Тесты…» — контракт для `/phase-review`: каждый пункт станет отдельным тестом по Testing policy в `AGENTS.md`. Дизайн: зачем; «Было / Стало / Почему», если -меняется принятое; что не входит. Индекс — новая строка, статус ⬜. +меняется принятое; что не входит. Индекс — новая строка в +`docs/phases/off-queue/README.md`, статус ⬜. Общий каталог срезов не трогать. Протокол, HTTP, сейв — назвать явно. Версию не бампать: это коммит с кодом. diff --git a/.claude/skills/slice-work/SKILL.md b/.claude/skills/slice-work/SKILL.md index 25f1041..dbbe598 100644 --- a/.claude/skills/slice-work/SKILL.md +++ b/.claude/skills/slice-work/SKILL.md @@ -19,8 +19,9 @@ description: >- ## Когда это -Прочитай `docs/phases/README.md`, `docs/bugs/README.md`, инварианты в -`AGENTS.md` и соседние дизайн-доки. +Прочитай оглавление `docs/phases/README.md` (не индексы всех срезов), +`docs/bugs/README.md`, инварианты в `AGENTS.md` и **только** дизайн-доки, +на которые срез опирается. - Уже чья-то фаза в индексе — скажи и отдай `/phase-work`. - Регрессия уже сделанного — `/bug-work`. @@ -54,15 +55,18 @@ description: >- Срез: максимум именованного в индексе, плюс один. -Фазы: максимум по `docs/phases/*.md` и индексу, плюс один, затем -`git branch --list "phase/-*"`. Занято — следующий. Гонку ловят ветки, -не индекс: у новой фазы на `main` строки ещё нет. +Фазы: максимум по именам `docs/phases/*/-*.md` (не README, не reviewed), +плюс один, затем `git branch --list "phase/-*"`. Занято — следующий. +Гонку ловят ветки, не индекс: у новой фазы на `main` строки ещё нет. ## 3. Документы -Как у соседа (`social.md`, `session.md`, `inventory.md`), не новый жанр. +Как у соседа по папке (`09-social/`, `08-session/`, `07-inventory/`), не новый жанр. -`docs/design/.md`: +Папки: `docs/design/-/` и `docs/phases/-/`. NN — номер +среза с ведущим нулём (`11-…`). «Вне очереди» номер среза не занимает. + +`docs/design/-/.md` (если доков несколько — как у `01-shell/`): - шапка: договорённость на срез, не текущий код; ссылки на соседние доки; - зачем, что увидит игрок, на какие вопросы отвечает, чего **нет**; @@ -73,13 +77,14 @@ description: >- - «Заведомо не сейчас»; - «Зафиксировано этим разговором». -Фазы — как у соседней, не короче бага: Зависимости, Зачем, Задачи, Тесты -без которых фаза не закрыта, Критерий готовности, Стоп. Галочки все `[ ]`. -«Тесты…» — контракт для `/phase-review`: каждый пункт станет отдельным -тестом по Testing policy в `AGENTS.md`. +Фазы — `docs/phases/-/-.md`, как у соседней, не короче +бага: Зависимости, Зачем, Задачи, Тесты без которых фаза не закрыта, Критерий +готовности, Стоп. Галочки все `[ ]`. «Тесты…» — контракт для `/phase-review`: +каждый пункт станет отдельным тестом по Testing policy в `AGENTS.md`. -Индекс — новая секция **перед** «Вне очереди», все ⬜, этапы как у 7–9. -Куда ходят люди — строка в Orientation `AGENTS.md`. +Индекс среза — `docs/phases/-/README.md` с таблицей фаз, все ⬜, +этапы как у 7–9. В общий `docs/phases/README.md` — **одна строка** в таблицу, +без копипасты фаз. Куда ходят люди — строка в Orientation `AGENTS.md`. Протокол, HTTP, сейв — назвать явно. Версию не бампать: это коммит с кодом. 🔄 не ставить: фазы ещё никто не взял. diff --git a/AGENTS.md b/AGENTS.md index f579de3..8187ba0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,16 +20,18 @@ way; this file is *how to work in them*. | connection handling, workers, saves | `src/HSchool.Server` | | what runs locally | `src/HSchool.AppHost/AppHost.cs` | | screens, dialogs, formatting, UI language | `src/HSchool.Client/src` | -| clothing, inventory, climate, dress codes | [`docs/design/inventory.md`](docs/design/inventory.md) — slice 7, phases 29–37; country, wardrobes and weather are live | -| 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 | -| lesson consequences (teacher present, skill, warmth, textbook, weather commute) | [`docs/design/off-queue.md`](docs/design/off-queue.md) — phases 48, 50–53 | -| layer tests, client tsc-in-test, worker/card splits, dump nodes | [`docs/design/craft.md`](docs/design/craft.md) — slice 10, phases 56–59 | +| clothing, inventory, climate, dress codes | [`docs/design/07-inventory/`](docs/design/07-inventory/inventory.md) — slice 7, phases 29–37 | +| login, who owns a school, watching others | [`docs/design/08-session/`](docs/design/08-session/session.md) — slice 8, phases 38–39 | +| clock speed buttons and high-speed stride | `src/HSchool.Simulation/ClockSpeed.cs` **and** [`session.md`](docs/design/08-session/session.md) — phase 40 | +| talks, opinions, fights, romance pack | [`docs/design/09-social/`](docs/design/09-social/social.md) — slice 9, phases 41–47 | +| lesson consequences (teacher present, skill, warmth, textbook, weather commute) | [`docs/design/off-queue/lesson-consequences.md`](docs/design/off-queue/lesson-consequences.md) — phases 48, 50–53 | +| layer tests, client tsc-in-test, worker/card splits, dump nodes | [`docs/design/10-craft/`](docs/design/10-craft/craft.md) — slice 10, phases 56–59 | | a bug in already-shipped behaviour | `.claude/skills/bug-work` — document in `docs/bugs/`, discuss only if the fix has a fork, then patch | -| a task that is not in any slice | `.claude/skills/side-work` — discuss, document in «Вне очереди», then implement | +| a task that is not in any slice | `.claude/skills/side-work` — discuss, document in [`docs/phases/off-queue/`](docs/phases/off-queue/README.md), then implement | | a new named slice of the game | `.claude/skills/slice-work` — discuss, write design and phases, then `/phase-orch` | +Docs are per slice: `docs/phases//` and `docs/design//`. [`docs/phases/README.md`](docs/phases/README.md) is a catalog — open only the slice you are changing. + ## Commands ```bash diff --git a/docs/bugs/README.md b/docs/bugs/README.md index 6406b6d..0b36f28 100644 --- a/docs/bugs/README.md +++ b/docs/bugs/README.md @@ -3,7 +3,7 @@ Индекс регрессий в уже сделанном. Статус: ⬜ не начат, 🔄 в работе, ✅ готов. Это не фазы: номера не спорят со срезами, в `docs/phases/` не дублировать. -Склейка систем и DX — [«Вне очереди»](../phases/README.md#вне-очереди), скилл +Склейка систем и DX — [«Вне очереди»](../phases/off-queue/README.md), скилл `/side-work`. Новый кусок игры — `/slice-work`. Как работать с багом — [`.claude/skills/bug-work`](../../.claude/skills/bug-work/SKILL.md). diff --git a/docs/design/08-session/session.md b/docs/design/08-session/session.md index de88e31..9847dda 100644 --- a/docs/design/08-session/session.md +++ b/docs/design/08-session/session.md @@ -2,7 +2,7 @@ Договорённость на следующий срез, не текущий код. Оболочка: [`near-term.md`](../01-shell/near-term.md). Рантайм: [`runtime.md`](../01-shell/runtime.md). -Протокол: [`../protocol.md`](../../protocol.md). +Протокол: [`protocol.md`](../../protocol.md). Один процесс сервера, несколько браузеров в локальной сети. Это не аккаунты и не интернет: общий пароль альфы пускает к двери, имя отличает игроков. Школу по-прежнему тикает её работник, diff --git a/docs/phases/01-shell/01-manager-shell.md b/docs/phases/01-shell/01-manager-shell.md index 6ca0c70..8cd7667 100644 --- a/docs/phases/01-shell/01-manager-shell.md +++ b/docs/phases/01-shell/01-manager-shell.md @@ -19,7 +19,7 @@ > **Отменено в фазе 8.** Панель общих событий убрана с экрана: пока ленты событий нет, постоянно > пустая треть экрана мешала, и место отдано вкладкам «Карта» и «Люди». Решение записано в -> [`docs/design/01-shell/near-term.md`](../../design/01-shell/near-term.md); появится лента — вернётся и панель. +> [`near-term.md`](../../design/01-shell/near-term.md); появится лента — вернётся и панель. ## Критерий готовности diff --git a/docs/phases/01-shell/README.md b/docs/phases/01-shell/README.md index 0e368be..adde64c 100644 --- a/docs/phases/01-shell/README.md +++ b/docs/phases/01-shell/README.md @@ -2,10 +2,10 @@ ## Срез 1. Оболочка и карта -Дизайн закрыт: [`../design/near-term.md`](../../design/01-shell/near-term.md), -[`../design/defs.md`](../../design/01-shell/defs.md), -[`../design/runtime.md`](../../design/01-shell/runtime.md), -[`../design/projects.md`](../../design/01-shell/projects.md). +Дизайн закрыт: [`near-term.md`](../../design/01-shell/near-term.md), +[`defs.md`](../../design/01-shell/defs.md), +[`runtime.md`](../../design/01-shell/runtime.md), +[`projects.md`](../../design/01-shell/projects.md). Новых игровых фич в эти фазы не добавлять. 1 и 2 можно вести параллельно (клиент / сервер). diff --git a/docs/phases/02-people/06-people-generator.md b/docs/phases/02-people/06-people-generator.md index ae5f6a4..db844f5 100644 --- a/docs/phases/02-people/06-people-generator.md +++ b/docs/phases/02-people/06-people-generator.md @@ -28,7 +28,7 @@ - [x] Тот же сид, карта и набор имён — ровно тот же ростер - [x] Тринадцатая семья не меняет, как разыграны первые двенадцать (фамилия, состав, имена). Класс ребёнка при этом меняется — места раздаются вперемешку по школе, иначе братья и - сёстры всегда оказывались одноклассниками; см. [`docs/design/02-people/people.md`](../../design/02-people/people.md) + сёстры всегда оказывались одноклассниками; см. [`people.md`](../../design/02-people/people.md) - [x] Фамилии, родовые формы и отчества внутри семьи согласованы - [x] Ученик с телосложением «полное» не получает высокую ловкость - [x] Все ученические места заполнены, все должности закрыты diff --git a/docs/phases/02-people/08-people-browser.md b/docs/phases/02-people/08-people-browser.md index cfc2343..426eaef 100644 --- a/docs/phases/02-people/08-people-browser.md +++ b/docs/phases/02-people/08-people-browser.md @@ -18,7 +18,7 @@ `TaskCompletionSource`, потому что нужды живые - [x] Панель «Люди» в оболочке менеджера: фильтры, сортируемые колонки, пейджер. Сделана **вкладкой рядом с картой**, а не нижним рядом — заодно с экрана ушла пустая панель - событий из фазы 1; см. [`docs/design/02-people/people.md`](../../design/02-people/people.md) + событий из фазы 1; см. [`people.md`](../../design/02-people/people.md) - [x] Строка списка — только лёгкие поля: ФИО, роль, класс или должность, возраст, пол - [x] Карточка: тело, навыки, черты, нужды, семья со ссылками на родных — по ссылке открывается карточка родственника diff --git a/docs/phases/02-people/README.md b/docs/phases/02-people/README.md index 85eb224..5697017 100644 --- a/docs/phases/02-people/README.md +++ b/docs/phases/02-people/README.md @@ -2,7 +2,7 @@ ## Срез 2. Люди -Дизайн: [`../design/people.md`](../../design/02-people/people.md). +Дизайн: [`people.md`](../../design/02-people/people.md). Школа наполняется людьми. Ученики, работники и родители существуют, показываются и обновляются раз в год — но **ничего не делают**: ни расписания, ни перемещений, ни влияния характеристик. diff --git a/docs/phases/03-staffing/README.md b/docs/phases/03-staffing/README.md index 9de5fe5..72119f1 100644 --- a/docs/phases/03-staffing/README.md +++ b/docs/phases/03-staffing/README.md @@ -2,7 +2,7 @@ ## Срез 3. Штат -Дизайн: [`../design/staffing.md`](../../design/03-staffing/staffing.md). +Дизайн: [`staffing.md`](../../design/03-staffing/staffing.md). Первый срез, где игрок принимает решения. Школа открывается пустой: надо нанять людей из пула соискателей, раздать им предметы и уложиться в выделенную на месяц сумму. Уроков по-прежнему нет — diff --git a/docs/phases/04-schedule/README.md b/docs/phases/04-schedule/README.md index 0a4c219..962c0c2 100644 --- a/docs/phases/04-schedule/README.md +++ b/docs/phases/04-schedule/README.md @@ -2,7 +2,7 @@ ## Срез 4. Расписание -Дизайн: [`../design/schedule.md`](../../design/04-schedule/schedule.md). +Дизайн: [`schedule.md`](../../design/04-schedule/schedule.md). Часы учебного плана раскладываются по дням и кабинетам. Школа начинает жить по времени: видно, что идёт в комнате прямо сейчас. Люди при этом по-прежнему **не ходят** — они находятся там, где diff --git a/docs/phases/05-ai/README.md b/docs/phases/05-ai/README.md index 85e9662..1f94a41 100644 --- a/docs/phases/05-ai/README.md +++ b/docs/phases/05-ai/README.md @@ -2,7 +2,7 @@ ## Срез 5. Жизнь школы -Дизайн: [`../design/ai.md`](../../design/05-ai/ai.md). +Дизайн: [`ai.md`](../../design/05-ai/ai.md). Люди начинают ходить и решать. Присутствие перестаёт вычисляться из расписания и становится состоянием: человек приходит утром, идёт коридором, может уйти с урока в туалет и вернуться. diff --git a/docs/phases/06-foundation/22-mod-identity.md b/docs/phases/06-foundation/22-mod-identity.md index 67a9022..189b6bb 100644 --- a/docs/phases/06-foundation/22-mod-identity.md +++ b/docs/phases/06-foundation/22-mod-identity.md @@ -25,7 +25,7 @@ - [x] Разрешённый порядок виден: пишется в лог при старте школы и возвращается в ответе создания - [x] Сейв хранит **разрешённый** порядок паков, чтобы школа поднималась тем же каталогом - [x] Загрузчик пишет предупреждение, когда у конкретного def нет подписи в локали пака -- [x] `docs/protocol.md` и [`docs/design/06-foundation/foundation.md`](../../design/06-foundation/foundation.md) правятся тем же +- [x] `docs/protocol.md` и [`foundation.md`](../../design/06-foundation/foundation.md) правятся тем же коммитом, что и обработчики ## Тесты, без которых фаза не закрыта diff --git a/docs/phases/06-foundation/23-example-pack.md b/docs/phases/06-foundation/23-example-pack.md index 130bcae..c050326 100644 --- a/docs/phases/06-foundation/23-example-pack.md +++ b/docs/phases/06-foundation/23-example-pack.md @@ -18,7 +18,7 @@ пока не выбран - [x] Пак едет в вывод сборки тестов теми же правилами, что и `core` - [x] Короткий `README.md` внутри пака: что где лежит и как добавить своё -- [x] Ориентир в [`docs/design/01-shell/defs.md`](../../design/01-shell/defs.md) показывает на него как на образец +- [x] Ориентир в [`defs.md`](../../design/01-shell/defs.md) показывает на него как на образец ## Тесты, без которых фаза не закрыта diff --git a/docs/phases/06-foundation/24-behavior-numbers.md b/docs/phases/06-foundation/24-behavior-numbers.md index d0653d6..335c4a6 100644 --- a/docs/phases/06-foundation/24-behavior-numbers.md +++ b/docs/phases/06-foundation/24-behavior-numbers.md @@ -6,7 +6,7 @@ ## Зачем -[`docs/design/05-ai/ai.md`](../../design/05-ai/ai.md) обещает: числа поведения — деф правил, как `StaffingDef` у +[`ai.md`](../../design/05-ai/ai.md) обещает: числа поведения — деф правил, как `StaffingDef` у штата. Порог нужды и разброс на дорогу туда уехали, а веса целей остались константами в коде. Пока они там, мод, меняющий одно число, вынужден быть форком. diff --git a/docs/phases/06-foundation/26-school-seed.md b/docs/phases/06-foundation/26-school-seed.md index 6afbf30..ab02a60 100644 --- a/docs/phases/06-foundation/26-school-seed.md +++ b/docs/phases/06-foundation/26-school-seed.md @@ -21,7 +21,7 @@ - [x] Существующие школы не меняются: сид читается из файла людей, как и сейчас - [x] Тесты хоста, которым нужен предсказуемый состав, передают сид явно, а не полагаются на порядок создания -- [x] `docs/protocol.md` и [`docs/design/02-people/people.md`](../../design/02-people/people.md) правятся тем же коммитом +- [x] `docs/protocol.md` и [`people.md`](../../design/02-people/people.md) правятся тем же коммитом ## Тесты, без которых фаза не закрыта diff --git a/docs/phases/06-foundation/README.md b/docs/phases/06-foundation/README.md index d540015..c78fd81 100644 --- a/docs/phases/06-foundation/README.md +++ b/docs/phases/06-foundation/README.md @@ -2,7 +2,7 @@ ## Срез 6. Фундамент -Дизайн: [`../design/foundation.md`](../../design/06-foundation/foundation.md). +Дизайн: [`foundation.md`](../../design/06-foundation/foundation.md). Срез без единой новой кнопки для игрока. Мод становится настоящим объектом, числа поведения уезжают из кода в данные, сид перестаёт быть идентификатором, у сейва появляется версия, а то, diff --git a/docs/phases/07-inventory/30-apparel-defs.md b/docs/phases/07-inventory/30-apparel-defs.md index b3bcb96..d212f04 100644 --- a/docs/phases/07-inventory/30-apparel-defs.md +++ b/docs/phases/07-inventory/30-apparel-defs.md @@ -18,7 +18,7 @@ ошибка - [x] Вещь с несколькими `layers` допустима (платье). Пересечение слоёв у двух надетых сразу валидатор не проверяет — это состояние человека, не каталога -- [x] Ваниль по [`docs/design/07-inventory/inventory.md`](../../design/07-inventory/inventory.md): бельё, носки, низы, верх, +- [x] Ваниль по [`inventory.md`](../../design/07-inventory/inventory.md): бельё, носки, низы, верх, свитер, куртка/пальто/шуба, обувь, шапка, аксессуары, платье, форма физкультуры, портфель, учебник, телефон, бутылка - [x] Палитра цветов и локали ru/en на все новые def diff --git a/docs/phases/07-inventory/37-school-rules.md b/docs/phases/07-inventory/37-school-rules.md index 4cb99a3..174cf0f 100644 --- a/docs/phases/07-inventory/37-school-rules.md +++ b/docs/phases/07-inventory/37-school-rules.md @@ -14,7 +14,7 @@ - [x] В «Управлении» вкладка **«Правила»** рядом со штатом, не новый верхний режим - [x] Четыре комбобокса: форма учеников, цвет учеников, форма сотрудников, цвет сотрудников. - Значения — как в [`docs/design/07-inventory/inventory.md`](../../design/07-inventory/inventory.md) + Значения — как в [`inventory.md`](../../design/07-inventory/inventory.md) - [x] Сохранение пишет завтрашнее правило; на экране видно, что действует сегодня и что вступит завтра - [x] HTTP: чтение текущих+отложенных, запись отложенных. Отказ по неизвестному коду правила — diff --git a/docs/phases/07-inventory/README.md b/docs/phases/07-inventory/README.md index 8b7683b..1e526cb 100644 --- a/docs/phases/07-inventory/README.md +++ b/docs/phases/07-inventory/README.md @@ -2,7 +2,7 @@ ## Срез 7. Одежда, вещи и климат -Дизайн: [`../design/inventory.md`](../../design/07-inventory/inventory.md). +Дизайн: [`inventory.md`](../../design/07-inventory/inventory.md). Человек одевается, несёт вещи, мёрзнет и переодевается. Игрок смотрит гардероб и выбирает правила школы; надевает не он. Погода видна у часов. Срез можно остановить после этапа A — diff --git a/docs/phases/08-session/README.md b/docs/phases/08-session/README.md index 4e4c202..bb49735 100644 --- a/docs/phases/08-session/README.md +++ b/docs/phases/08-session/README.md @@ -2,7 +2,7 @@ ## Срез 8. Сессия и темп -Дизайн: [`../design/session.md`](../../design/08-session/session.md). +Дизайн: [`session.md`](../../design/08-session/session.md). Несколько браузеров на одном сервере: общий пароль альфы, имя игрока, свои школы и чужие отдельным списком. Часы становятся смотрибельными — минута за секунду, на высоких скоростях diff --git a/docs/phases/09-social/README.md b/docs/phases/09-social/README.md index 959f7ff..f42c6cc 100644 --- a/docs/phases/09-social/README.md +++ b/docs/phases/09-social/README.md @@ -2,7 +2,7 @@ ## Срез 9. Общение и романтический пак -Дизайн: [`../design/social.md`](../../design/09-social/social.md). +Дизайн: [`social.md`](../../design/09-social/social.md). Разговор становится кружком, мнение — числом, вражда — ссорой. Романтика не ваниль: отдельный пак. Срез можно остановить после этапа B — школа болтает, даже если драк и пака ещё нет. diff --git a/docs/phases/10-craft/README.md b/docs/phases/10-craft/README.md index fe3d6a5..abfb967 100644 --- a/docs/phases/10-craft/README.md +++ b/docs/phases/10-craft/README.md @@ -2,7 +2,7 @@ ## Срез 10. Ремесло -Дизайн: [`../design/craft.md`](../../design/10-craft/craft.md). +Дизайн: [`craft.md`](../../design/10-craft/craft.md). Срез без новой кнопки. Слои ловятся одним тестовым проектом, клиентский `npm test` гоняет tsc, работник и карточка режутся по швам, дамп проверяет явку. После этапа A школа целая, даже если diff --git a/docs/phases/off-queue/README.md b/docs/phases/off-queue/README.md index 21cc2e3..6f38520 100644 --- a/docs/phases/off-queue/README.md +++ b/docs/phases/off-queue/README.md @@ -2,12 +2,12 @@ ## Вне очереди -Дизайн: [`../design/off-queue.md`](../../design/off-queue/README.md). +Дизайн: [`off-queue.md`](../../design/off-queue/README.md). Склейка уже живых систем и мелкий DX, не новый кусок игры. Номера не спорят с именованными срезами. После каждой игровой фазы школа целая. 50–52 стоят на 48; 53 — на 18 и 32, можно параллельно с 48. 49, 54 и 55 от них не зависят. Баг в уже сделанном — -[`../bugs/README.md`](../../bugs/README.md). +[bugs](../../bugs/README.md). | Фаза | Статус | Зачем | | --- | --- | --- |