diff --git a/product-planning/references/stage-delivery/SKILL.md b/product-planning/references/stage-delivery/SKILL.md
index 5307855..a4f3ca4 100644
--- a/product-planning/references/stage-delivery/SKILL.md
+++ b/product-planning/references/stage-delivery/SKILL.md
@@ -296,6 +296,10 @@ Gate-1 方向门(硬闸,不可跳)——按本表逐项自检(字段定
真实渲染后(浏览器打开,非只看代码)肉眼过八项:裁切 / 重叠 / 失真 / 失效控件 / 缺状态 / 响应式破损 / 控制台报错 / 字体回退异常。渲染截图已代劳其中的溢出与响应式破损,其余仍需人眼(截图查不出「点了没反应」)。
+> 🔴 **判据的执行件=本段自带脚本**(`references/stage-delivery/scripts/`):骨架逐位比对、JS 语法、
+> 逐视口读数、变异对照四条,跨项目共用同一份。**用法只写一处** ⇒ `references/execution-runbook.md` §5.6。
+> 脚本按目录形态定位 ②段与原型、节号与页数现读 ⇒ ②段改结构时不需要改脚本。
+
### 审计报告落盘
`designs/<项目>/3d-审查报告.md`,固定七节:范围 + 挡位 + 阻断项表 + 建议项表 + 状态覆盖核对表 + 结构核对表 + Gate 结论(含「本轮是否跑了脚本」一句)。
diff --git a/product-planning/references/stage-delivery/references/execution-runbook.md b/product-planning/references/stage-delivery/references/execution-runbook.md
index 8cf60a3..e7ff5a0 100644
--- a/product-planning/references/stage-delivery/references/execution-runbook.md
+++ b/product-planning/references/stage-delivery/references/execution-runbook.md
@@ -377,6 +377,44 @@
---
+### 5.6 闸门脚本(Gate-1/2/3 的执行件,本段自带)
+
+判据由**本段自带的脚本**执行,跨项目共用同一份(`references/stage-delivery/scripts/`)。
+各项目自己养一份时,同一条判据会长出多个版本(实测:某项目的骨架闸门已有 3 个版本,
+其中一版还停在旧页数常量上 ⇒ 跑起来要么当场报错、要么按错的页数**静默比错**)。
+
+五条脚本(都在 `scripts/` 下):
+
+1. `check_skeleton.py` —— ②段《界面布局》的页面骨架 ↔ 原型 `FROZEN` 表,逐页逐位比对。
+ 跑法:`python scripts/check_skeleton.py --ws <工作区>`
+2. `check_js.py` —— 原型 `" not in src:
+ return C.die("原型里没有 `")
+ js = src[i:j]
+ fails = []
+
+ # ① 语法
+ if not node:
+ fails.append("没找到 node(用 --node 或环境变量 NODE_BIN 指定)")
+ print("FAIL 语法:没找到 node ⇒ 这一条没跑(⛔ 不是 PASS)")
+ else:
+ with tempfile.NamedTemporaryFile("w", suffix=".js", delete=False,
+ encoding="utf-8", newline="") as f:
+ f.write(js)
+ tmp = f.name
+ try:
+ r = subprocess.run([node, "--check", tmp], capture_output=True)
+ if r.returncode == 0:
+ print("PASS 语法: