R20Q-U-B1 R04 STOP facts
{
"schema": "router-step-facts-v1",
"result": "STOP_R20QUB1_R04_PUBLICATION_CONTINUATION",
"step_id": "STEP_050M07R20QUB1_R04_VM101_BOOT_HANDOFF_PUBLICATION_CONTINUATION",
"stop_phase": "independent_extract",
"stop_line": "216",
"stop_rc": 1,
"stop_command": "python3 - \"$BUNDLE_ZIP\" \"$FINAL_EXTRACT\" \"$STEP_ID\" <<'PY'\nfrom pathlib import Path,PurePosixPath\nimport zipfile,sys,stat,os\nzpath=Path(sys.argv[1])\ndst=Path(sys.argv[2]).resolve()\nexpected=sys.argv[3]\nwith zipfile.ZipFile(zpath) as z:\n roots=set()\n safe=[]\n for member in z.infolist():\n name=PurePosixPath(member.filename)\n parts=name.parts\n if not parts or name.is_absolute() or '..' in parts or ':' in parts[0]:\n raise SystemExit('unsafe member')\n roots.add(parts[0])\n target=(dst/Path(*parts)).resolve()\n if target!=dst and dst not in target.parents:\n raise SystemExit('escape')\n mode=(member.external_attr>>16)&0xffff\n if mode and stat.S_ISLNK(mode):\n raise SystemExit('symlink')\n if mode and stat.S_IMODE(mode)&0o7000:\n raise SystemExit('special bits')\n safe.append((member,target,mode))\n if roots!={expected}:\n raise SystemExit(f'roots {roots}')\n z.extractall(dst)\n for member,target,mode in safe:\n if mode:\n os.chmod(target,stat.S_IMODE(mode))\nPY\n",
"core_change_complete": true,
"core_change_repeated": false,
"rollback_status": "not_applicable_read_only_continuation",
"snapshot_name": "r20qub1-pre-0731-214833",
"snapshot_created_in_continuation": false,
"run_dir": "/opt/router-ops/state/detached-step-runs/STEP_050M07R20QUB1_R04_VM101_BOOT_HANDOFF_PUBLICATION_CONTINUATION/runs/20260731-220318-648815-4314",
"reboot": false,
"zero_healthy_repeated": false
}