Ok, so the logging helps a lot - I now have a slightly clearer picture of what is going on. It's still pretty tricky disentangling the various intertwined sequences of updates, but as far as I can tell, there are missing sheetworker events. Pretty much all calls to setAttrs in the Shaped Sheet go via a single function, in which I've placed a log call. Here's one piece of the output: "setFinalAttrs npc.updateContent: {\"default_ability\":\"intelligence\",\"repeating_action_-KUhPSofDH7ty6FMLD5G_name\":\"Scimitar\",\"repeating_action_-KUhPSofDH7ty6FMLD5G_freetext\":\"Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) slashing damage.\",\"repeating_action_-KUhPSofDH7ty6FMLD5H_name\":\"Shortbow\",\"repeating_action_-KUhPSofDH7ty6FMLD5H_freetext\":\"Ranged Weapon Attack: +4 to hit, range 80/320 ft., one target. Hit: 5 (1d6 + 2) piercing damage.\",\"repeating_trait_-KUhPSoggyg137WODfei_name\":\"Nimble Escape\",\"repeating_trait_-KUhPSoggyg137WODfei_display_text\":\"The goblin can take the Disengage or Hide action as a bonus action on each of its turns.\",\"repeating_trait_-KUhPSoggyg137WODfei_freetext\":\"The goblin can take the Disengage or Hide action as a bonus action on each of its turns.\"}" The object in there contains the attributes that are being set. You'll note that there are two repeating_actions and a repeating_trait being created. All three have a freetext field that is being set. Now, the sheet has event handlers for both 'change:repeating_action' and 'change:repeating_action:freetext'. I've put logging at the beginning of both those handlers, and they never get called. There's obviously a *lot* of other stuff going on at the same time, which complicates matters, but that seems to be the crux of it. As I pointed out before, if I *directly* modify the freetext attribute within that repeating section using the API, it looks like the handler gets fired correctly, so it's not a blanket problem with firing handlers in repeating sections. I guess it might either be an interaction with some of the other things going on at the same time, or perhaps, as I speculated before, it's connected to attribute creation specifically. Unfortunately I don't think I'm going to have time to create a more minimal testcase for a while right now - things are super-busy here - but I'm reasonably confident in stating that there *is* a problem with the sheetworker execution under the API based on the output of the logging. If it would help, I'm happy for you to experiment with the test campaign I'm using which has the relevant logging, and I can give you a small script that should trigger the problem reliably within that campaign.