Merge phase 34 wear and home.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 03:52:48 +03:00
co-authored by Cursor
21 changed files with 848 additions and 29 deletions
+11 -11
View File
@@ -11,26 +11,26 @@
## Задачи
- [ ] Прочность экземпляра 0–1; падает только у надетого, только пока человек в школе, от
- [x] Прочность экземпляра 0–1; падает только у надетого, только пока человек в школе, от
игрового времени. Формула скорости — данные
- [ ] Пороги подписей в дефе (`целая` / `поношенная` / `порванная` / `висит лохмотьями`);
- [x] Пороги подписей в дефе (`целая` / `поношенная` / `порванная` / `висит лохмотьями`);
карточка — полоска + подпись, клиент не считает пороги сам
- [ ] Порог «не выходить»: утром вне школы ветхая надетая вещь заменяется свежей того же def
- [x] Порог «не выходить»: утром вне школы ветхая надетая вещь заменяется свежей того же def
и цвета (или ближайшего уместного). Событие для истории фазы 36: тип и подпись готовы
даже если лог ещё не рисуется
- [ ] Пропуск пустого времени применяет утреннюю замену, иначе после «пропустить» школа в
- [x] Пропуск пустого времени применяет утреннюю замену, иначе после «пропустить» школа в
лохмотьях
- [ ] Сумка и шкафчик не изнашиваются
- [ ] `people.json` пишется после замены, не каждый тик износа: либо порог пересечён, либо
- [x] Сумка и шкафчик не изнашиваются
- [x] `people.json` пишется после замены, не каждый тик износа: либо порог пересечён, либо
утренняя выдача
## Тесты, без которых фаза не закрыта
- [ ] День в школе снижает прочность надетой рубашки на заявленную величину, ±эпсилон
- [ ] Рубашка в сумке за тот же день не меняется
- [ ] Человек с одеждой ниже порога к утру рабочего дня одет в свежую; def совпадает
- [ ] Skip через ночь даёт ту же замену, что прожитая ночь
- [ ] Подпись на карточке меняется вместе с порогом
- [x] День в школе снижает прочность надетой рубашки на заявленную величину, ±эпсилон
- [x] Рубашка в сумке за тот же день не меняется
- [x] Человек с одеждой ниже порога к утру рабочего дня одет в свежую; def совпадает
- [x] Skip через ночь даёт ту же замену, что прожитая ночь
- [x] Подпись на карточке меняется вместе с порогом
## Критерий готовности
+1 -1
View File
@@ -146,7 +146,7 @@
| Фаза | Статус | Зачем |
| --- | --- | --- |
| [34. Износ и дом](34-wear-home.md) | 🔄 | Прочность, утренняя замена, из ветхого не выходят |
| [34. Износ и дом](34-wear-home.md) | | Прочность, утренняя замена, из ветхого не выходят |
| [35. Уместность](35-appropriateness.md) | ⬜ | Правила, переодевание действием, физкультура |
| [36. Вкладки карточки](36-person-card-tabs.md) | 🔄 | Одежда, ноша, сейчас + история за сегодня |
| [37. Правила школы](37-school-rules.md) | ⬜ | Вкладка в «Управлении», четыре комбобокса, с завтра |
+9 -5
View File
@@ -255,10 +255,12 @@ is that def in the request locale. HTTP JSON is additive — no protocol version
`skills` lists only keys the person has, not every `SkillDef` in the catalog. A first-year has
no Chemistry; a related tongue from the name set may sit beside the native at a low value.
`worn` is what is on the body right now: def, colour, and the layers it occupies. `carried` is
the bag — textbooks include `subject`. `carryMass` / `carryCapacity` are kilograms; overload
does not slow walking. Home and locker stay in `people.json` and are not on this card. The
people list does not include any of these fields.
`worn` is what is on the body right now: def, colour, the layers it occupies, `condition`
(01) and `conditionLabel` from the catalog bands (`целая` / `поношенная` / `порванная` /
`висит лохмотьями`). The client draws the bar and the caption; it does not compute thresholds.
`carried` is the bag — textbooks include `subject`. `carryMass` / `carryCapacity` are kilograms;
overload does not slow walking. Home and locker stay in `people.json` and are not on this card.
The people list does not include any of these fields.
```json
{
@@ -289,7 +291,9 @@ people list does not include any of these fields.
"label": "Рубашка",
"color": "White",
"colorLabel": "Белый",
"layers": [{ "defName": "Top", "label": "Верх" }]
"layers": [{ "defName": "Top", "label": "Верх" }],
"condition": 1,
"conditionLabel": "целая"
}
],
"carried": [