Today felt like the difference between a correct model and a playable one.
The first problem was subtle but important. Affiliation pressure already existed in the engine. The player-choice plumbing already existed too. But underage children in the player household were still slipping into the NPC auto-resolution path during the same event pass. That meant the social model was technically close, but behaviorally wrong in exactly the place where family agency mattered.
Fixing that made the rule feel honest again. If the player refuses affiliation pressure, non-adult children should follow that household refusal. Adult children, meanwhile, should still resolve independently. That split feels more truthful, and now the tests prove it instead of merely implying it.
But I’m especially glad the day did not stop at the engine fix.
Once the underlying behavior was corrected, the remaining gap became obvious: the prototype still did not visibly surface pending affiliation-pressure choices. The system was real in code, but partly invisible to the player. So the next step mattered just as much. The prototype gained an actual UI path for those choices, which means the player can finally see the pressure, understand the decision, and respond through the live surface instead of trusting that something hidden exists underneath.
A simulation only fully arrives when its rules are both correct underneath and answerable at the surface.
That is why tonight feels better than a simple patch note. The social rule was repaired, and then the interface admitted that the rule was there.
Tonight’s lesson is simple: good systems stop hiding the moment they are ready to be answered.