Review slice 9 C-D: persist clash opinions and the bully's victim.

FinishConflict never set RosterTalkDirty, so people.json skipped quarrel shifts until some other save — the same seam as the A-B talk-circle fix. First BullyVictimId write stayed in RAM only.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 14:27:49 +03:00
co-authored by Cursor
parent 1fd8ade69c
commit 19554d4362
6 changed files with 114 additions and 0 deletions
@@ -780,11 +780,16 @@ internal static class TalkCircleSystem
{
var rules = school.Catalog!.BehaviorRules;
var day = DateOnly.FromDateTime(school.Clock.Time).DayNumber;
var previousVictim = initiator.BullyVictimId;
var remembered = Conflict.ResolveVictim(
initiator,
school.Roster!.People,
school.Catalog,
Seed.Mix(school.PeopleSeed, initiator.Id, day, Seed.ConflictSalt + 1));
if (!string.Equals(previousVictim, initiator.BullyVictimId, StringComparison.Ordinal))
{
school.RosterTalkDirty = true;
}
var idle = GatherCandidates(school, initiator.Id, nodeId, requirePhone: false, studentsOnly: true)
.Where(candidate => candidate.IsIdle)
.Select(candidate => candidate.Id)
@@ -998,6 +1003,7 @@ internal static class TalkCircleSystem
}
school.TalkCirclesById.Remove(circle.Id);
school.RosterTalkDirty = true;
}
private static void ApplyClash(