Remove off-queue.md and add new design documentation files including README.md, defs.md, near-term.md, projects.md, runtime.md, people.md, staffing.md, and schedule.md to outline the structure and agreements for the game's design phases.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# Фаза 39. Хозяин школы
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 38](38-session.md)
|
||||
- [Фаза 13](../03-staffing/13-management-tab.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
У школы есть хозяин. Свои слоты — свои, чужие смотрят отдельно и не управляют.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [x] `SimulationOptions.MaxSchools` — слоты **игрока**, умолчание 2.
|
||||
`MaxSchoolsTotal` — воркеры процесса, умолчание 16. Подъём с диска режет по Total, не по
|
||||
слотам игрока
|
||||
- [x] Сейв несёт `owner`. Нет поля — бесхозная. Формат не бампить
|
||||
- [x] Create пишет текущего пользователя; отказ: свои слоты кончились (`limit-reached`) или
|
||||
сервер полон (`server-full`)
|
||||
- [x] `GET /api/schools`: `maxSchools` — слоты игрока, `maxSchoolsTotal`, `schools` — свои,
|
||||
`others` — чужие и бесхозные (`owner` имя или `null`). Карточка школы несёт `mine`
|
||||
- [x] Welcome.`MaxSchools` — слоты игрока (байт тот же, смысл новый)
|
||||
- [x] Мутации чужой — HTTP `403` `not-owner`. Бесхозную может удалить любой залогиненный.
|
||||
`OpenSchool` — всем с сессией. Пауза / скорость / пропуск от гостя до работника не доходят.
|
||||
**Исключение:** `POST .../portrait` — гость генерирует теми же пресетами школы; это не управление
|
||||
- [x] Меню: блок «Мои» и блок «Чужие». У бесхозной в чужих — удалить, у чужой с хозяином — нет
|
||||
- [x] Внутри чужой школы нет вкладки «Управление» и нет кнопок часов (пауза, скорость, пропуск).
|
||||
Карта и люди остаются
|
||||
- [x] `docs/protocol.md` — списки и коды ошибок. Версию сокета не бампить
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [x] Два пользователя: у каждого по две школы, третья своего — `limit-reached`; чужая в
|
||||
`others`, не в `schools`
|
||||
- [x] Восьмая школа на сервере с `MaxSchoolsTotal` = 7 — `server-full`, даже если у игрока слот есть
|
||||
- [x] Гость: `POST` найма — `403`; `SetRunning` не меняет `running` хозяина
|
||||
- [x] Сейв без `owner` поднимается, лежит в `others`, удаляется вторым пользователем
|
||||
- [x] Клиентский тест: чужая карточка без кнопки удаления; в чужой школе нет «Управление»
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Два браузера, два имени: каждый видит свою сетку и чужие отдельным блоком; в чужой школе
|
||||
часы чужие не нажимаются
|
||||
- `dotnet test` и `npm test` / `build` проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не отдавать бесхозную в слот игрока. Не показывать гостю «Управление» даже чтением.
|
||||
Не менять скорости.
|
||||
Reference in New Issue
Block a user