Files
h-school/docs/phases/09-social/reviewed.md
T
2026-08-20 14:28:26 +03:00

7.7 KiB
Raw Blame History

Журнал ревью — срез 9

Срез 9. Этапы A–B — мнения и разговоры

  • Фазы: 4143
  • Проверен на: b38d0bb, 2026-08-20
  • Пути: src/HSchool.People/OpinionStore.cs, src/HSchool.People/OpinionGenerator.cs, src/HSchool.People/OpinionLabels.cs, src/HSchool.Ai/TalkCircles.cs, src/HSchool.Simulation/MorningOpinions.cs, src/HSchool.Simulation/TalkCircleSystem.cs, src/HSchool.Simulation/School.cs, src/HSchool.Server/Game/PersonCardReader.cs, src/HSchool.Server/mods/core/defs/topics/, src/HSchool.Server/mods/core/defs/traits/, src/HSchool.Client/src/ui/personCard.ts, docs/protocol.md, tests/HSchool.People.Tests, tests/HSchool.Ai.Tests, tests/HSchool.Simulation.Tests
  • Итог: обещания 41–43 на месте; дописано 14 тестов; исправлено 2 расхождения (сейв мнений после разговора; PickTopic почти всегда брал последнюю тему). 44 и 46 — в работе на момент проверки (44 🔄, 46 ). 45 и 47 в этот проход не входили.
  • Открыто: Outgoing.talkCircleBonus не меняет размер кружка при talkCircleMax 4 и жёстком clamp 4.

Что проверено

Каждый пункт «Тесты, без которых фаза не закрыта» у 41–43 имеет отдельный тест. Клиент рисует присланную opinionLabel, вкладка «Связи» не монтирует лог и ничего не POST-ит. Сокет 41–43 не бампили. dotnet test с --filter по затронутым классам зелёный.

Что дописано

  • OpinionStoreTests.SetZero_RemovesTheEntry
  • OpinionStoreTests.Set_ClampsToMinusOneHundredAndOneHundred
  • OpinionGeneratorTests.RosterJson_RoundTripsFamilyOpinions
  • OpinionGeneratorTests.SaveWithoutOpinionsField_SeedsFamilyOnLoad
  • MorningOpinionsTests.DriftToZero_DropsTheRecord
  • TalkCirclesTests.NodeFriendScore_PullsTowardFriends_NotEnemies
  • TalkCirclesTests.LunchNodeBlockedByEnemy_OnlyWhenAnotherSeatExists
  • TalkCirclesTests.GossipAndOutgoing_UseTraitFields_NotHardcodedIdLists
  • TalkCirclesTests.GossipTrait_BiasesPickTopicTowardGossipTag
  • TalkCirclesTests.AppearanceTopic_UsesDressAppropriateness
  • TalkCirclesTests.CommunicationGain_IsLessThanLessonSkillPerHour
  • TalkCirclesTests.PickTopic_IsNotAlwaysTheLastNameAlphabetically
  • TalkCircleTests.TalkCircleFinish_MarksTickPeopleChangedSoSaveWritesOpinions
  • WhisperTests.CaughtWhisper_BecomesDisciplineTalkWithTeacher

Что исправлено

  • Конец кружка писал мнения в ростер, но Tick не возвращал peopleChanged — воркер не сохранял people.json до утреннего дрейфа.
  • PickTopic сравнивал бросок в шкале 0…total с курсором 0…1, поэтому тема почти всегда была последней по имени, а сплетник не сдвигал выбор.

Открытое

  • Черта «общительный» задаёт talkCircleBonus: 1, но MaxSize клампит к 4 при уже talkCircleMax 4 — поле мёртвое, пока верхний потолок не ниже 4. Менять ванильный размер кружка ревью не стало.

Срез 9. Этапы C–D — конфликт, присутствие, речь и romance

  • Фазы: 4447
  • Проверен на: 19554d4, 2026-08-20
  • Пути: src/HSchool.Ai/Conflict.cs, src/HSchool.Simulation/TalkCircleSystem.cs, src/HSchool.Simulation/PresenceSystem.cs, src/HSchool.Simulation/AffinitySystem.cs, src/HSchool.Simulation/MorningOpinions.cs, src/HSchool.People/Affinity.cs, src/HSchool.People/OrientationGenerator.cs, src/HSchool.Content/SpeechRules.cs, src/HSchool.Protocol/ProtocolCodec.cs, src/HSchool.Client/src/net/protocol.ts, src/HSchool.Client/src/format/talkCircle.ts, src/HSchool.Client/src/ui/dressRulesPanel.ts, src/HSchool.Client/src/ui/personCardNow.ts, src/HSchool.Client/src/ui/personCardConnections.ts, src/HSchool.Server/mods/romance/, src/HSchool.Server/Game/PresenceFrame.cs, src/HSchool.Server/Api/SpeechRulesModels.cs, docs/protocol.md, tests/HSchool.Ai.Tests/ConflictTests.cs, tests/HSchool.Simulation.Tests/QuarrelFightTests.cs, tests/HSchool.Simulation.Tests/TalkCircleTests.cs, tests/HSchool.Simulation.Tests/MorningOpinionsTests.cs, tests/HSchool.Protocol.Tests/ProtocolCodecTests.cs, tests/HSchool.People.Tests/AffinityTests.cs, tests/HSchool.People.Tests/OrientationGeneratorTests.cs, tests/HSchool.Content.Tests/RomancePackTests.cs, tests/HSchool.AppHost.Tests/RomancePackTests.cs, tests/HSchool.AppHost.Tests/SpeechRulesApiTests.cs
  • Итог: обещания 44–47 на месте; дописано 4 теста; исправлено 2 расхождения с тем же швом, что у 41–43 (сейв после ссоры; id жертвы задиры). Seed.Mix в политиковых тестах не трогали. Фазу 60 не закрывали.
  • Открыто: строка локации для тем пака romance показывает defName, не локаль пака.

Что проверено

Каждый пункт «Тесты, без которых фаза не закрыта» у 44–47 имеет отдельный тест. Ссора/драка — поля черт, не defName; skip пустого двора бросает кружок, а не тащит драку через выходные; нужды «здоровье» нет. Кадр присутствия v9 несёт id кружка и темы, имён нет; «Сейчас» собирает ту же строку из directory. Политика речи — с завтра, POST сегодня не переписывает живой кружок. Ваниль и example без романтических тем; пара только 18+; учитель → ученик не получает симпатию. Хостовые RomancePackTests / SpeechRulesApiTests в этом проходе не гонялись (политика тестирования: не AppHost, сервер пользователя не трогали). dotnet test с --filter по QuarrelFightTests, RosterJson_RoundTripsBullyVictimId и PupilTalkWithTeacherCrush зелёный.

Что дописано

  • QuarrelFightTests.QuarrelFinish_MarksTickPeopleChangedSoSaveWritesOpinions
  • QuarrelFightTests.BullyPickingAVictim_DirtiesRosterSoSaveKeepsTheId
  • OpinionGeneratorTests.RosterJson_RoundTripsBullyVictimId
  • AffinityTests.PupilTalkWithTeacherCrush_WritesRebuffAndDropsOpinion

Что исправлено

  • Конец ссоры, драки и извинения писал мнения, но не ставил RosterTalkDirty — воркер не сохранял people.json до следующего чужого сдвига, как с кружком до ревью A–B.
  • Первая запись BullyVictimId оставалась только в памяти: после перезагрузки задира бросал кубик заново.

Открытое

  • Клиентский talkTopicLabel знает только ванильные ключи. Тема пака в локации — сырой id; в логе карточки подпись берётся из каталога. Вшивать строки пака в ванильный словарь ревью не стало.