Commit Graph
121 Commits
Author SHA1 Message Date
Leonid Pershin e461a9f3e4 Fix PE change-clothes interruption and post-PE mode detection.
Add appropriateness tests for staging PE kit, wearing form before gym, and returning to everyday clothes after the lesson.
2026-08-20 06:31:41 +03:00
Leonid Pershin dc9830f332 Merge branch 'phase/37-school-rules' 2026-08-20 06:23:35 +03:00
Leonid Pershin aab0c00988 Add school dress rules tab in Management with tests. 2026-08-20 06:20:06 +03:00
Leonid Pershin 5a400be792 Add SwarmUI settings management and portrait generation enhancements
- Introduced new API endpoints for managing SwarmUI settings, including fetching and saving presets and age rules.
- Updated the portrait generation logic to utilize the new settings structure, allowing for dynamic preset selection based on age.
- Enhanced UI components to support SwarmUI settings, including localization for new strings and improved styling for settings sections.
- Added tests to verify the functionality of new settings endpoints and portrait generation behavior.

This commit lays the groundwork for more flexible and user-friendly portrait generation options.
2026-08-20 06:06:45 +03:00
Leonid Pershin 8b4fbdc41b Merge branch 'phase/36-person-card-tabs' 2026-08-20 05:54:23 +03:00
Leonid PershinandCursor 3485ce8ac4 Close phase 36 apparel-changed log tail.
Add simulation and paged day-log tests; mark the log task complete in the phase doc.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 05:44:09 +03:00
Leonid Pershin 6eb16d0edf Enhance person card functionality: add custom prompt textarea persistence during input, streamline portrait prompt API by removing unused parameters, and ensure proper button state management based on input. Update tests to verify new behavior.
ci / server (push) Failing after 3m44s
ci / client (push) Failing after 14s
2026-08-20 05:32:40 +03:00
Leonid Pershin 3fa6ce95df Implement portrait prompt API and UI enhancements. Added a new endpoint to fetch portrait prompts, updated the client to handle prompt display, and improved localization for prompt-related text. Enhanced styling for prompt elements in the UI.
ci / server (push) Failing after 3m40s
ci / client (push) Failing after 15s
2026-08-20 05:27:01 +03:00
Leonid Pershin a214378c6e Merge branch 'phase/35-appropriateness'
ci / server (push) Failing after 3m44s
ci / client (push) Failing after 14s
# Conflicts:
#	docs/phases/README.md
2026-08-20 05:19:33 +03:00
Leonid Pershin 6a0d5a9886 Implement phase 35 dress appropriateness and school rules.
Adds outfit evaluation, morning home dressing, locker-room ChangeClothes with day-log events, PE/weather AI goals, dress-rules API, and tests.
2026-08-20 05:16:52 +03:00
Leonid Pershin ac0470bbc4 Implement custom portrait generation: update API, UI, and localization to support user-defined prompts for portraits, replacing half-body option with custom variant.
ci / server (push) Failing after 3m38s
ci / client (push) Failing after 14s
2026-08-20 05:16:40 +03:00
Leonid Pershin df0aaad403 Add half-body portrait support: update API, UI, and localization for new portrait type
ci / server (push) Failing after 3m40s
ci / client (push) Failing after 14s
2026-08-20 05:10:51 +03:00
Leonid Pershin 9225327d31 Enhance SwarmUI settings by adding a scheduler property and updating the client to send clip stop at layer instead of clip skip. Added tests to verify the new behavior.
ci / server (push) Failing after 3m41s
ci / client (push) Failing after 14s
2026-08-20 05:02:44 +03:00
Leonid Pershin ce772cd3c3 Phase 33: technician climate control and locker assignment. 2026-08-20 04:44:41 +03:00
Leonid Pershin ee23fb4994 Merge branch 'phase/36-person-card-tabs'
ci / server (push) Failing after 4m1s
ci / client (push) Failing after 17s
2026-08-20 04:35:35 +03:00
Leonid Pershin 5991dcd5c4 Enhance SwarmUI integration by adding swarm connection status to the API and updating client-side components to reflect this status. Improved localization strings for various SwarmUI states and refactored ApplicantsDialog and PersonCard components to utilize the new connection information, ensuring a more responsive user experience.
ci / server (push) Failing after 4m56s
ci / client (push) Failing after 15s
2026-08-20 04:21:35 +03:00
Leonid Pershin 47241a5bd4 Merge branch 'phase/32-weather-warmth' 2026-08-20 04:18:49 +03:00
Leonid Pershin dfa9a25dca Implement portrait generation and retrieval for people in the school system. Added new API endpoints for generating and fetching portraits, including support for avatar and full-body images. Updated the client-side to handle portrait states and display options. Enhanced the person card UI to include tabs for overview and portrait, with appropriate localization strings. Updated solution files to include new test projects. Adjusted server configuration for SwarmUI integration.
ci / server (push) Failing after 3m46s
ci / client (push) Failing after 14s
2026-08-20 04:14:41 +03:00
Leonid Pershin 5a431bba99 Merge branch 'main' into phase/32-weather-warmth
Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	src/HSchool.Simulation/School.cs
2026-08-20 04:03:42 +03:00
Leonid PershinandCursor 53c4ae0f92 Sum warmth insulation from worn items and refresh goldens for the new trait pool.
HeatLoving and ColdLoving shift later trait rolls; worn clothes now feed PersonInsulation instead of reflection.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 04:00:53 +03:00
Leonid PershinandCursor 6be4fa75ab Split the person card into overview, clothes, carry and now tabs.
Today's history is a paged HTTP log on the worker, not on the card or in people.json.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 04:00:38 +03:00
Leonid Pershin 34acec16c2 Merge branch 'main' into phase/32-weather-warmth 2026-08-20 03:50:04 +03:00
Leonid PershinandCursor 8e7ab46e79 Sample outdoor weather from the climate preset so people can freeze and the clock can show it.
Protocol v8 adds tenths of a °C and precipitation to the clock frame; warmth drains from insulation versus place temperature.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 03:49:40 +03:00
Leonid PershinandCursor 1ba739dd9b Wear worn clothes on campus and replace rags at the work morning.
Condition drops from catalog hours only while the person is at school; skip through the night issues the same fresh set as a lived night so the school does not walk in in rags.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 03:49:11 +03:00
Leonid PershinandCursor 37501c506a Dress people at generation from a separate apparel stream.
Wardrobes live on the person in people.json: everyday layers, textbooks per parallel, and chance-based bags from catalog data. Hauling and the carry cap are defs, not constants. The golden roster gains an items column; later family members shift because Hauling consumes extra appearance rolls. Old saves without items are dressed on load.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 03:24:54 +03:00
Leonid PershinandCursor d8f4958167 Merge phase 29 country.
ci / server (push) Failing after 3m53s
ci / client (push) Successful in 19s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 02:59:46 +03:00
Leonid PershinandCursor 1b66c89cd7 Replace selectable name sets with a country that owns names and climate presets.
Create picks a country; climate is rolled from the school seed and stored. Old Slavic saves lift as Russia.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 02:55:13 +03:00
Leonid PershinandCursor cf086600c3 Merge phase 30 apparel defs.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 02:54:21 +03:00
Leonid Pershin cbe739a4e6 Update reviewed phase details, enhance presence tests for hiring and assigning teachers during lessons, and fix timetable handling in the School class. Added new tests for presence management and ensured proper campus staffing behavior during lesson transitions.
ci / server (push) Failing after 4m0s
ci / client (push) Successful in 17s
2026-08-20 02:47:24 +03:00
Leonid PershinandCursor abcf67eaab Let the catalog describe clothes and carryables on ThingDef without dressing anyone.
Empty layers keep furniture on the map; a known layer set and ColorDef palette reject unknown ids at load.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 02:47:23 +03:00
Leonid Pershin 450495f666 Update design documentation for inventory and climate phases, clarify staffing test results, and add new presence test for hiring and assigning a teacher during lessons.
ci / server (push) Failing after 3m41s
ci / client (push) Successful in 16s
2026-08-20 02:34:16 +03:00
Leonid PershinandCursor 505b1429ab Ship a disk example pack so last-wins, patches and create-with-a-mod are tested for real.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 01:06:12 +03:00
Leonid PershinandCursor edd3d35c79 Merge phase 26 school seed.
ci / server (push) Failing after 3m34s
ci / client (push) Failing after 12s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 00:43:33 +03:00
Leonid Pershin 7a59ef27f4 Merge phase 24 behavior numbers.
ci / server (push) Failing after 3m35s
ci / client (push) Successful in 13s
Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/phases/README.md
#	src/HSchool.Content/CatalogLoader.cs
2026-08-20 00:36:32 +03:00
Leonid PershinandCursor 2b4cd29bda Merge phase 27 save format and dump.
ci / server (push) Failing after 3m34s
ci / client (push) Successful in 13s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 00:34:54 +03:00
Leonid PershinandCursor a7955a0dce Refuse newer save formats and add a gated dump of a live school.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 00:30:39 +03:00
Leonid PershinandCursor 48f0b15221 Give each school its own people seed so composition no longer follows create order.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 00:28:13 +03:00
Leonid PershinandCursor e1a0f06017 Move goal weights into BehaviorDef so a pack can rebalance decisions without a fork.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 00:27:52 +03:00
Leonid PershinandCursor 263c94c55d Give packs an identity so create can refuse missing deps and load in a stable order.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 00:20:36 +03:00
Leonid Pershin e5a0ae5b9d 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.
2026-08-19 23:53:37 +03:00
Leonid Pershin 5eabc90d53 Enhance school day structure and decision-making for lunch breaks
ci / server (push) Failing after 3m43s
ci / client (push) Successful in 15s
- Updated `ai.md` to clarify the mechanics of hunger restoration and the importance of lunch breaks in the school schedule.
- Revised `schedule.md` to detail the new lunch break structure, allowing for separate sittings for different grade levels.
- Enhanced `Decision.cs` and `DecisionPlanner.cs` to incorporate logic for lunch breaks, ensuring that students only leave lessons during their designated lunch windows.
- Updated `DayFrameDef` and related classes to support multiple lunch breaks and validate their configurations.
- Adjusted tests to validate the new decision-making logic regarding lunch breaks and hunger management, ensuring robust functionality.
- Improved localization strings to reflect changes in the school day structure and lunch functionalities.
2026-08-19 23:17:16 +03:00
Leonid Pershin 5a00ad7746 Enhance school creation and staffing management with native language support
ci / server (push) Failing after 3m44s
ci / client (push) Successful in 14s
- Updated protocol documentation to include `nativeLanguages` in `nameSets` and added `nativeLanguage` to school creation options.
- Enhanced the UI for school creation to allow selection of native languages, improving user experience.
- Revised API interfaces to accommodate new native language features, ensuring proper data handling.
- Improved localization strings to support new native language functionalities in both English and Russian.
- Updated tests to validate the new native language features and ensure robust functionality in staffing scenarios.
2026-08-19 22:22:31 +03:00
Leonid Pershin 21d79cb49b Enhance people management tests and fix related issues
ci / server (push) Failing after 3m44s
ci / client (push) Successful in 15s
- Updated `PeopleApiTests` to correctly handle family structures, ensuring tests account for single-parent scenarios and sorting behavior for surnames.
- Added a new test to validate roster integrity after the yearly intake, confirming that the composition reflects changes post-intake.
- Revised assertions to ensure accurate comparisons of student and family data, improving test reliability.
- Enhanced documentation within tests to clarify the purpose and expected outcomes of new functionalities.
- Addressed discrepancies between design and implementation regarding the layout of the people management interface.
2026-08-19 21:31:01 +03:00
Leonid Pershin 5cd5a6d258 Update decision-making phase and enhance localization for presence tracking
ci / server (push) Failing after 3m40s
ci / client (push) Successful in 14s
- Marked tasks as complete in the decision-making phase documentation, indicating readiness for implementation.
- Updated the README to reflect the completion status of the decision-making phase.
- Enhanced localization strings to include new presence tracking features, improving user experience.
- Revised the game screen logic to display real-time presence status, including walking states for individuals.
- Added tests to validate the new localization strings and presence functionalities, ensuring robust performance.
2026-08-19 21:00:12 +03:00
Leonid Pershin b135a9caad Enhance protocol and simulation features with activity tracking and behavior definitions
- Updated protocol documentation to include new `activity` and `activityLabel` fields in the person card response, reflecting real-time activity status.
- Introduced `BehaviorDef` to define behavior rules, including need thresholds and lesson skill gains, enhancing AI decision-making.
- Revised the `DefCatalog` to incorporate behavior definitions and updated validation logic to ensure proper behavior handling.
- Enhanced the simulation to manage presence and activity states, allowing for more dynamic interactions within the school environment.
- Updated tests to validate the new activity tracking and behavior functionalities, ensuring robust performance and reliability.
- Improved localization strings to support new activity and behavior features, enhancing user experience.
2026-08-19 19:49:44 +03:00
Leonid Pershin 3c54f981b7 Update wire protocol to version 7 and enhance presence management features
ci / server (push) Failing after 3m44s
ci / client (push) Successful in 15s
- Bumped the wire protocol version to 7, reflecting significant changes in the communication structure.
- Introduced a new presence message type for real-time occupancy updates, including node activity and individual presence states.
- Updated the API to include a directory endpoint for fetching short id→name mappings, improving client-side name resolution.
- Revised the map snapshot structure to be static, with people and current lessons now handled through the presence stream.
- Enhanced client-side handling of presence updates, including UI adjustments to display live occupancy and activity.
- Updated documentation to reflect the new protocol features and changes in presence management.
- Added tests to validate the new presence functionalities and ensure robust handling of real-time data.
2026-08-19 17:00:53 +03:00
Leonid Pershin 4137400621 Enhance AI and simulation components with presence management and routing capabilities
ci / server (push) Failing after 3m39s
ci / client (push) Successful in 14s
- Introduced the `HSchool.Ai` project, responsible for routing, day plans, and presence management.
- Updated the `HSchool.Simulation` project to integrate with the new AI functionalities, improving decision-making and presence tracking.
- Added `travelMinutes` to room and territory definitions, ensuring accurate movement calculations within the simulation.
- Enhanced the `School` class to manage presence and implement empty-time skipping functionality.
- Updated documentation to reflect the new AI features and their impact on school simulation.
- Added tests for presence management and routing to ensure robust functionality and reliability.
2026-08-19 16:33:52 +03:00
Leonid Pershin 207e7ecdb3 Update payroll cap to enhance staffing flexibility and adjust related documentation and tests
ci / server (push) Failing after 10s
ci / client (push) Successful in 14s
- Increased the `MonthlyPayrollCap` from 40,000 to 100,000, allowing for greater hiring capacity and subject assignments.
- Updated relevant documentation to reflect the new payroll cap and its implications for staffing.
- Adjusted tests to validate the new payroll cap and ensure proper functionality in staffing scenarios, including allocation and remaining payroll calculations.
- Enhanced styling in the UI to accommodate the changes in management screens.
2026-08-19 13:09:45 +03:00
Leonid Pershin 25ce26064d Update staffing management to enhance payroll and hiring functionalities
ci / server (push) Failing after 3m39s
ci / client (push) Successful in 14s
- Increased the `MonthlyPayrollCap` from 10,000 to 40,000, allowing for greater flexibility in hiring and subject assignments.
- Revised payroll calculation logic to ensure that staff members are compensated based on their actual weekly hours, with a minimum payment reflecting one full rate.
- Updated documentation to clarify the new payroll structure and its implications for hiring and subject assignments.
- Enhanced tests to validate the new payroll cap and ensure proper functionality in staffing scenarios, including the handling of uncovered subjects.
- Improved localization strings to reflect changes in staffing and payroll terminology.
2026-08-19 12:51:38 +03:00
Leonid Pershin d61240d5c1 Enhance timetable functionality and UI integration
ci / server (push) Failing after 3m31s
ci / client (push) Successful in 13s
- Updated protocol documentation to include new `classId` and `roomLabel` fields in the timetable API responses.
- Added classes and rooms to the timetable response structure, improving data accessibility for client applications.
- Enhanced the UI components to display timetable information, including class and room details, in the management and people panels.
- Implemented functionality to fetch and display personal timetables for individuals, ensuring a comprehensive view of schedules.
- Revised localization strings to support new timetable features and improve user experience.
- Added tests to validate the new timetable functionalities and ensure robustness in handling timetable data.
2026-08-19 10:45:09 +03:00