I've played around with this a bit. I've culled things down to some minimal code for testing
<input type="number" name="attr_COMinit" value="0" />
<input type="number" name="attr_CNSinit" value="0" />
<input type="number" name="attr_COMinit2" value="0" />
<input type="number" name="attr_CNSinit2" value="0" />
<br>
<input type="number" name="attr_COM" value="0" readonly />
<input type="number" name="attr_CNS" value="0" readonly />
<input type="number" name="attr_COM2" value="0" readonly />
<input type="number" name="attr_CNS2" value="0" readonly />
<script type="text/worker">
on("change:cominit", function(eventInfo){
getAttrs(["COMinit","COMproglib"], function(values) {
console.log(eventInfo.sourceAttribute);
var init = parseInt(values.COMinit) || 0;
setAttrs({
COM: init
});
});
});
on("change:cnsinit", function(eventInfo){
getAttrs(["CNSinit","CNSproglib"], function(values) {
console.log(eventInfo.sourceAttribute);
var init = parseInt(values.CNSinit) || 0;
setAttrs({
CNS: init
});
});
});
on("change:cominit2", function(eventInfo){
getAttrs(["COMinit2","COMproglib2"], function(values) {
console.log(eventInfo.sourceAttribute);
var init = parseInt(values.COMinit2) || 0;
setAttrs({
COM2: init
});
});
});
on("change:cnsinit2", function(eventInfo){
getAttrs(["CNSinit2","CNSproglib2"], function(values) {
console.log(eventInfo.sourceAttribute);
var init = parseInt(values.CNSinit2) || 0;
setAttrs({
CNS2: init
});
});
});
</script>

Custom Jumpgate game;
The first and third column always fails to trigger the worker. I can swap the column positions in the html and the first input of the first and third column always fails to trigger. Every odd column fails to trigger the sheetworker. I have no clue why... I've removed all sheet css and this happens in legacy and CSE.
Custom Non-Jumpgate game;
inputs trigger the worker as expected.
