Update documentation to enhance clarity on native language and skill generation
ci / server (push) Failing after 3m37s
ci / client (push) Successful in 14s

- Revised `AGENTS.md` to specify that the same seed, map, name set, and native language must produce the same roster in tests.
- Updated `protocol.md` to clarify that everyone in the school is generated with the selected native language, and related languages may appear at a low skill.
- Enhanced `ai.md` to explain skill growth mechanics based on state and the introduction of minimum ranges for skills not yet acquired.
- Improved `people.md` to detail the generation of skills and traits, emphasizing that not every person receives every skill and the implications of body attributes on skill acquisition.
- Adjusted `projects.md` to reflect the inclusion of native language in roster generation, ensuring comprehensive documentation of project components.
This commit is contained in:
Leonid Pershin
2026-08-19 22:27:20 +03:00
parent 5a00ad7746
commit a441ed9763
5 changed files with 51 additions and 23 deletions
+9 -3
View File
@@ -80,7 +80,10 @@ total is computed on the server.
`nameSets` is the list of placeable name packs (`defName` + label + `nativeLanguages`). Each
`nativeLanguages` entry is a skill (`defName` + label). The create dialog picks a name set and a
native language; the language list comes from that set (vanilla Slavic: Russian, Belarusian,
Ukrainian). It is independent of the UI language.
Ukrainian). It is independent of the UI language. Everyone in the school is generated with that
native. Other languages of the same set often appear at a low skill — a Russian speaker who
understands Belarusian. Those rolls live on the `NameSetDef` (`relatedLanguageChance` and
neighbours), not on this catalog payload.
`subjects` is the list of placeable subjects (`defName`, label, `gradeMin`/`gradeMax`,
`hoursPerWeek`, `skills` with shares, and optional `room`). `room` is the RoomDef the lesson
@@ -227,6 +230,9 @@ grid fetches `GET .../timetable?classId=` with it.
`activity` is the ActionDef name currently in progress, or `null` when idle. `activityLabel`
is that def in the request locale. HTTP JSON is additive — no protocol version bump.
`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.
```json
{
"id": "f0.c0",
@@ -329,8 +335,8 @@ those lessons will not happen.
Applicants here are the same people as in `saves/{id}.people.json`. A parent keeps the same
id on the roster; hiring them sets `isStaff` on that person and does not create a second
entity. Generated candidates (`aN.p0`) join the roster only when hired. `skills` on an
applicant are the three strongest, for the management list; the full set is on the person
card. `positions` and `subjects` are the school's catalog, so the hire and assign pickers
applicant are the three strongest, for the management list; the card lists every skill they
have, not the three strongest. `positions` and `subjects` are the school's catalog, so the hire and assign pickers
do not need a second request.
`GET /api/schools/{id}/people/{personId}` also opens a card for someone who is only in the