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 语法: