# 已做好、待射程确定后直接粘进 .gitea/workflows/pr-checks.yml(插在 smoke:peer-floor 那步之后) # 2026-09-11 本机两臂实测过:空 env ⇒ EXIT=0 响亮跳过 · 真 token ⇒ 守卫放行。 # ⛔ 用前必须先改一行:`pnpm audit:mockup-conformance` → 带 `--file <产品文件 key>` # (闸 :504-507 逐字「缺 --file 一律 exit 2」;那个 key ⛔ 不是 .env 里的设计系统库 key) - name: Figma 侧 mockup 一致性闸 (Q6 wire-ci · 需 repo secret,未设则响亮跳过) # 🔴 **这一步补的是哪个洞**:`audit-mockup-conformance.mjs` 是 13 条 mockup 规则的 # **唯一自动执行点**,而它此前只挂在 `.claude/hooks/`(PostToolUse + Stop) # ⇒ 闸级覆盖 1/40,且**只在 Claude Code 里生效** —— Codex / claude.ai / # 设计师直接在 Figma 里手改,全部绕过(队列 Q6 逐字登记的那一族)。 # ⇒ 接 CI 是唯一能覆盖「不经 Claude Code 的改动」的路。 # # ⚠️ **为什么守卫写在 shell 里而不是 `if: ${{ secrets.X != '' }}`**: # ① 本文件头注释(:19-21)逐字要求「在本机验证任何 step 的 `run:` 体时必须用 # `bash -c` 跑」—— shell 判据**能在本机两臂实测**,workflow 表达式不能; # ② 实测依据:`requireFigmaToken()`(`scripts/lib/figma-env.mjs:158`)缺 token 时 # `process.exit(2)`,所以**不能**裸接 —— secret 未设时会让 CI 立刻红。 # # ⚠️ **为什么「跳过」在这里不是 fail-open**:这条闸的能力完全依赖凭据。secret 未设 # ⇒ 它无法工作 ⇒ 此时跳过与「根本没接」是同一个状态,**没有比现状更差**。 # ⛔ 但绝不允许静默跳过 —— 「CI 全绿」会被读成「Figma 侧已被守住」= 假安全感 # (本仓已登记的病:恒绿 = 零信息)。故用 `::warning::` + 明确修法文案。 # # ⚠️ **如实登记的验证边界**:本机已两臂实测(空 env ⇒ 跳过并印 warning;`.env` 真 # token ⇒ 真进引擎)。但**「在 Gitea runner 上带 secret 真跑」未观测** —— # 那要等 repo secret 设好后的第一次 CI。⛔ 别把本步首次绿读成「Figma 侧已覆盖」。 # # 为什么能上这台非特权 runner:纯 node + HTTPS,零 chromium、零真机。 # 与 pre-commit 不同挂(pre-commit 路径上不联网、不用凭据);PR 与 push:master 都跑 # —— INFRA-F61 gate 平权。⚠️ 对 `audit:gate-ci-parity` 无影响:那条闸的差集是 # 「pre-commit 有而 CI 没有」(`audit-gate-ci-parity.mjs:32` 逐字 `差集 = A \ B`), # 本步只让 B 变大 ⇒ 差集不变或变小。 env: FIGMA_PERSONAL_ACCESS_TOKEN: ${{ secrets.FIGMA_PERSONAL_ACCESS_TOKEN }} FIGMA_FILE_KEY: ${{ secrets.FIGMA_FILE_KEY }} run: | set -e if [ -z "${FIGMA_PERSONAL_ACCESS_TOKEN:-}" ] || [ -z "${FIGMA_FILE_KEY:-}" ]; then echo "::warning title=Figma 侧闸未启用::repo secret 未设 ⇒ 本步跳过。⛔ 本次 CI 绿不代表 Figma 侧被守住。" echo "" echo "⚠️ 跳过 audit:mockup-conformance —— 缺 repo secret。" echo " FIGMA_PERSONAL_ACCESS_TOKEN = ${FIGMA_PERSONAL_ACCESS_TOKEN:+已设}${FIGMA_PERSONAL_ACCESS_TOKEN:-未设}" echo " FIGMA_FILE_KEY = ${FIGMA_FILE_KEY:+已设}${FIGMA_FILE_KEY:-未设}" echo "" echo " 修法(一次性,仓库设置 → Actions → Secrets 各加一条):" echo " FIGMA_PERSONAL_ACCESS_TOKEN = " echo " FIGMA_FILE_KEY = <设计系统库的 file key>" echo " 设好后本步自动生效,⛔ 不需要再改本文件。" echo "" echo " ⛔ 在此之前:Codex / claude.ai / 设计师直接在 Figma 手改,仍然全部绕过" echo " 这 13 条 mockup 规则(唯一执行点在 .claude/hooks/,只在 Claude Code 里)。" exit 0 fi echo "✅ secret 已设 ⇒ 真跑 Figma 侧一致性闸" pnpm audit:mockup-conformance