Repro
tmp=$(mktemp -d /tmp/goboscript-property.XXXXXX)
printf 'costumes "blank.svg";\n' > "$tmp/stage.gs"
printf 'costumes "blank.svg";\nonflag { say "Stage"."not a property"; say "missing"."x position"; }\n' > "$tmp/main.gs"
touch "$tmp/blank.svg"
cargo run --quiet -- build "$tmp"
python3 - <<'PY' "$tmp/$(basename "$tmp").sb3"
import json, sys, zipfile
with zipfile.ZipFile(sys.argv[1]) as z:
project = json.loads(z.read('project.json'))
for target in project['targets']:
if not target['isStage']:
for block in target['blocks'].values():
print(block)
PY
Actual
Build exits 0 and emits invalid-looking sensing_of menus without validation:
{'opcode': 'sensing_of', ..., 'fields': {'PROPERTY': ['not a property', None]}}
{'opcode': 'sensing_of_object_menu', ..., 'fields': {'OBJECT': ['missing', None]}}
Expected
Literal sensing_of property names should be validated against Scratch's allowed property list, and literal object names should be validated against _stage_ or known sprite names.
Notes
This is the reporter equivalent of the literal menu validation gaps for key/backdrop/sound/sprite-target blocks.
Repro
Actual
Build exits 0 and emits invalid-looking
sensing_ofmenus without validation:Expected
Literal
sensing_ofproperty names should be validated against Scratch's allowed property list, and literal object names should be validated against_stage_or known sprite names.Notes
This is the reporter equivalent of the literal menu validation gaps for key/backdrop/sound/sprite-target blocks.