Enhance staffing management with uncovered teacher tracking
ci / server (push) Failing after 3m43s
ci / client (push) Successful in 14s

- Updated `protocol.md` to clarify the concept of uncovered subjects and the number of additional teachers required.
- Introduced `teachersShort` property in the `StaffingSubject` interface to indicate how many more teachers are needed for a subject.
- Enhanced localization strings to reflect the new uncovered teacher information in both English and Russian.
- Updated the management panel UI to display the number of teachers short for each uncovered subject.
- Revised the `Uncovered` method in the staffing logic to return detailed information about uncovered subjects, including the shortfall of teachers.
- Added tests to validate the new uncovered teacher tracking functionality and ensure accurate reporting in the staffing API.
- Marked related tasks as complete in the documentation for the golden fixtures phase.
This commit is contained in:
Leonid Pershin
2026-08-19 23:53:37 +03:00
parent c27d43f66a
commit e5a0ae5b9d
27 changed files with 16055 additions and 38 deletions
@@ -0,0 +1,14 @@
# Golden saves
`current/` is a school file of today's format. `legacy-no-native/` is the same school without
`nativeLanguage`, so a missing field still has to mean "first language of the name set" rather
than a new roll.
These files live forever: a new save field must load `current/` and must not reshuffle
`legacy-no-native/`. A real format change adds a new folder; it does not rewrite the old one.
Regenerate after an intentional roster change (same commit):
```
WRITE_GOLDEN=1 dotnet test tests/HSchool.People.Tests/HSchool.People.Tests.csproj --filter Dump_HostSaveFixtures
```
@@ -0,0 +1,63 @@
{
"format": 2,
"id": 1,
"name": "Золотая",
"gameTime": "2012-03-31T06:00:00Z",
"running": false,
"speedIndex": 1,
"modIds": [
"core"
],
"map": {
"territory": {
"id": "yard",
"def": "SchoolYard"
},
"buildings": [
{
"id": "main",
"def": "MainBuilding"
}
],
"floors": [
{
"id": "floor-1",
"def": "StandardFloor",
"building": "main",
"label": "1"
}
],
"rooms": [
{
"id": "classroom-00",
"def": "Classroom",
"building": "main",
"floor": "floor-1",
"label": "101",
"seats": 16,
"slots": []
},
{
"id": "classroom-01",
"def": "Classroom",
"building": "main",
"floor": "floor-1",
"label": "102",
"seats": 16,
"slots": []
}
],
"links": [
{
"a": "yard",
"b": "classroom-00"
},
{
"a": "yard",
"b": "classroom-01"
}
]
},
"nameSetId": "Slavic",
"nativeLanguage": "RussianLanguage"
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,62 @@
{
"format": 2,
"id": 1,
"name": "Золотая",
"gameTime": "2012-03-31T06:00:00Z",
"running": false,
"speedIndex": 1,
"modIds": [
"core"
],
"map": {
"territory": {
"id": "yard",
"def": "SchoolYard"
},
"buildings": [
{
"id": "main",
"def": "MainBuilding"
}
],
"floors": [
{
"id": "floor-1",
"def": "StandardFloor",
"building": "main",
"label": "1"
}
],
"rooms": [
{
"id": "classroom-00",
"def": "Classroom",
"building": "main",
"floor": "floor-1",
"label": "101",
"seats": 16,
"slots": []
},
{
"id": "classroom-01",
"def": "Classroom",
"building": "main",
"floor": "floor-1",
"label": "102",
"seats": 16,
"slots": []
}
],
"links": [
{
"a": "yard",
"b": "classroom-00"
},
{
"a": "yard",
"b": "classroom-01"
}
]
},
"nameSetId": "Slavic"
}
File diff suppressed because it is too large Load Diff