Looks like twine won't scope variables in for-loops. Therefor in your theft minigame, the _trait passed in the link is always the last of the target skills (while 'print' shows the value at render time, 'set' inside a <<link>> use the value when the user clicks, so _trait is on its latest iteration)
You want to wrap your link with <<capture _trait>>...<</capture>> to keep the correct _trait