# Pipeline Safe Default Verification

跑时间：2026-04-28 14:53:53 +08:00

## Before snapshots
- figma-data/ git status:

```text

```

- site-review-manifest.json:

```text

```

## Pipeline 输出（关键行）
- Step 1 标题:

```text
▶ Step 1: cleanup:unpublished (dry-run, 不删文件)
```

- SUMMARY 末尾:

```text
⚠️ 2 个步骤未通过。
查看：
  - docs/internal/published-vs-code-audit.md（mapping 状态）
  - audit:figma-conformance / audit:docs-site 输出
  - figma-data/figma-to-code-mapping.json（新增 needs-review 条目）
```

- 各步退出码:

```text
✅  Step 1: cleanup:unpublished (dry-run, 不删文件)
❌ exit=1  Step 2: audit:published-vs-code --auto-suggest-unmapped
✅  Step 3: ensure-docs-site-manifest --apply
✅  Step 4: audit:figma-conformance
❌ exit=1  Step 5: audit:docs-site
```

## After snapshots
- figma-data/ git status:

```text
 M figma-data/normalized/components-tokenized.index.json
 D figma-data/normalized/components-tokenized/after_selecting_r_wi__99_20185.json
 D figma-data/normalized/components-tokenized/auto_recover__267_56820.json
 D figma-data/normalized/components-tokenized/dark_filled_btn__1459_77740.json
 D figma-data/normalized/components-tokenized/dark_filled_btn__1497_37114.json
 D figma-data/normalized/components-tokenized/dark_outlined_btn__1459_77747.json
 D figma-data/normalized/components-tokenized/dark_outlined_btn__1497_37121.json
 D figma-data/normalized/components-tokenized/dark_text_btn__1459_77761.json
 D figma-data/normalized/components-tokenized/dark_text_btn__1497_37135.json
 D figma-data/normalized/components-tokenized/home__272_41895.json
 D figma-data/normalized/components-tokenized/icon_edit_add_1__1459_107427.json
 D figma-data/normalized/components-tokenized/icon_guides_16_16__1065_3071.json
 D figma-data/normalized/components-tokenized/icon_indicator_file__5202_118.json
 D figma-data/normalized/components-tokenized/icon_meeting_mic_external_closed__5177_187.json
 D figma-data/normalized/components-tokenized/icon_message_notification_1__1459_106971.json
 D figma-data/normalized/components-tokenized/icon_network_bluetooth_closed__5177_141.json
 D figma-data/normalized/components-tokenized/icon_search_search__1459_106959.json
 D figma-data/normalized/components-tokenized/icon_setting_custom__1459_106921.json
 D figma-data/normalized/components-tokenized/icon_setting_setting_1__1459_106935.json
 D figma-data/normalized/components-tokenized/light_filled_btn__1459_77724.json
 D figma-data/normalized/components-tokenized/light_filled_btn__1497_37098.json
 D figma-data/normalized/components-tokenized/light_outlined_btn__1459_77733.json
 D figma-data/normalized/components-tokenized/light_outlined_btn__1497_37107.json
 D figma-data/normalized/components-tokenized/light_text_btn__1459_77754.json
 D figma-data/normalized/components-tokenized/light_text_btn__1497_37128.json
 D figma-data/normalized/components-tokenized/property_1_enable__1459_77725.json
 D figma-data/normalized/components-tokenized/property_1_enable__1459_77734.json
 D figma-data/normalized/components-tokenized/property_1_enable__1459_77741.json
 D figma-data/normalized/components-tokenized/property_1_enable__1459_77748.json
 D figma-data/normalized/components-tokenized/property_1_enable__1459_77755.json
 D figma-data/normalized/components-tokenized/property_1_enable__1459_77762.json
 D figma-data/normalized/components-tokenized/property_1_enable__1497_37099.json
 D figma-data/normalized/components-tokenized/property_1_enable__1497_37108.json
 D figma-data/normalized/components-tokenized/property_1_enable__1497_37115.json
 D figma-data/normalized/components-tokenized/property_1_enable__1497_37122.json
 D figma-data/normalized/components-tokenized/property_1_enable__1497_37129.json
 D figma-data/normalized/components-tokenized/property_1_enable__1497_37136.json
 D figma-data/normalized/components-tokenized/property_1_hover__1459_77729.json
 D figma-data/normalized/components-tokenized/property_1_hover__1459_77736.json
 D figma-data/normalized/components-tokenized/property_1_hover__1459_77743.json
 D figma-data/normalized/components-tokenized/property_1_hover__1459_77750.json
 D figma-data/normalized/components-tokenized/property_1_hover__1459_77757.json
 D figma-data/normalized/components-tokenized/property_1_hover__1459_77764.json
 D figma-data/normalized/components-tokenized/property_1_hover__1497_37103.json
 D figma-data/normalized/components-tokenized/property_1_hover__1497_37110.json
 D figma-data/normalized/components-tokenized/property_1_hover__1497_37117.json
 D figma-data/normalized/components-tokenized/property_1_hover__1497_37124.json
 D figma-data/normalized/components-tokenized/property_1_hover__1497_37131.json
 D figma-data/normalized/components-tokenized/property_1_hover__1497_37138.json
 D figma-data/normalized/components-tokenized/property_1_press__1459_77727.json
 D figma-data/normalized/components-tokenized/property_1_press__1459_77738.json
 D figma-data/normalized/components-tokenized/property_1_press__1459_77745.json
 D figma-data/normalized/components-tokenized/property_1_press__1459_77752.json
 D figma-data/normalized/components-tokenized/property_1_press__1459_77759.json
 D figma-data/normalized/components-tokenized/property_1_press__1459_77766.json
 D figma-data/normalized/components-tokenized/property_1_press__1497_37101.json
 D figma-data/normalized/components-tokenized/property_1_press__1497_37112.json
 D figma-data/normalized/components-tokenized/property_1_press__1497_37119.json
 D figma-data/normalized/components-tokenized/property_1_press__1497_37126.json
 D figma-data/normalized/components-tokenized/property_1_press__1497_37133.json
 D figma-data/normalized/components-tokenized/property_1_press__1497_37140.json
 M figma-data/normalized/components.manifest.json
 M figma-data/raw/components.index.json
 D figma-data/raw/components/after_selecting_r_wi__99_20185.json
 D figma-data/raw/components/auto_recover__267_56820.json
 D figma-data/raw/components/dark_filled_btn__1459_77740.json
 D figma-data/raw/components/dark_filled_btn__1497_37114.json
 D figma-data/raw/components/dark_outlined_btn__1459_77747.json
 D figma-data/raw/components/dark_outlined_btn__1497_37121.json
 D figma-data/raw/components/dark_text_btn__1459_77761.json
 D figma-data/raw/components/dark_text_btn__1497_37135.json
 D figma-data/raw/components/home__272_41895.json
 D figma-data/raw/components/icon_edit_add_1__1459_107427.json
 D figma-data/raw/components/icon_guides_16_16__1065_3071.json
 D figma-data/raw/components/icon_indicator_file__5202_118.json
 D figma-data/raw/components/icon_meeting_mic_external_closed__5177_187.json
 D figma-data/raw/components/icon_message_notification_1__1459_106971.json
 D figma-data/raw/components/icon_network_bluetooth_closed__5177_141.json
 D figma-data/raw/components/icon_search_search__1459_106959.json
 D figma-data/raw/components/icon_setting_custom__1459_106921.json
 D figma-data/raw/components/icon_setting_setting_1__1459_106935.json
 D figma-data/raw/components/light_filled_btn__1459_77724.json
 D figma-data/raw/components/light_filled_btn__1497_37098.json
 D figma-data/raw/components/light_outlined_btn__1459_77733.json
 D figma-data/raw/components/light_outlined_btn__1497_37107.json
 D figma-data/raw/components/light_text_btn__1459_77754.json
 D figma-data/raw/components/light_text_btn__1497_37128.json
 D figma-data/raw/components/property_1_enable__1459_77725.json
 D figma-data/raw/components/property_1_enable__1459_77734.json
 D figma-data/raw/components/property_1_enable__1459_77741.json
 D figma-data/raw/components/property_1_enable__1459_77748.json
 D figma-data/raw/components/property_1_enable__1459_77755.json
 D figma-data/raw/components/property_1_enable__1459_77762.json
 D figma-data/raw/components/property_1_enable__1497_37099.json
 D figma-data/raw/components/property_1_enable__1497_37108.json
 D figma-data/raw/components/property_1_enable__1497_37115.json
 D figma-data/raw/components/property_1_enable__1497_37122.json
 D figma-data/raw/components/property_1_enable__1497_37129.json
 D figma-data/raw/components/property_1_enable__1497_37136.json
 D figma-data/raw/components/property_1_hover__1459_77729.json
 D figma-data/raw/components/property_1_hover__1459_77736.json
 D figma-data/raw/components/property_1_hover__1459_77743.json
 D figma-data/raw/components/property_1_hover__1459_77750.json
 D figma-data/raw/components/property_1_hover__1459_77757.json
 D figma-data/raw/components/property_1_hover__1459_77764.json
 D figma-data/raw/components/property_1_hover__1497_37103.json
 D figma-data/raw/components/property_1_hover__1497_37110.json
 D figma-data/raw/components/property_1_hover__1497_37117.json
 D figma-data/raw/components/property_1_hover__1497_37124.json
 D figma-data/raw/components/property_1_hover__1497_37131.json
 D figma-data/raw/components/property_1_hover__1497_37138.json
 D figma-data/raw/components/property_1_press__1459_77727.json
 D figma-data/raw/components/property_1_press__1459_77738.json
 D figma-data/raw/components/property_1_press__1459_77745.json
 D figma-data/raw/components/property_1_press__1459_77752.json
 D figma-data/raw/components/property_1_press__1459_77759.json
 D figma-data/raw/components/property_1_press__1459_77766.json
 D figma-data/raw/components/property_1_press__1497_37101.json
 D figma-data/raw/components/property_1_press__1497_37112.json
 D figma-data/raw/components/property_1_press__1497_37119.json
 D figma-data/raw/components/property_1_press__1497_37126.json
 D figma-data/raw/components/property_1_press__1497_37133.json
 D figma-data/raw/components/property_1_press__1497_37140.json
?? figma-data/figma-to-code-mapping.json
?? figma-data/normalized/published-vs-code.audit.json
```

- site-review-manifest.json:

```text
 M docs/site-review-manifest.json
```

## Diff 结论
- figma-data/ 是否有新增 D / M：Yes
  - 新增状态统计：`M=3`, `D=120`, `??=2`
  - 结论：默认跑 `pnpm sync:figma-library` 后，`figma-data/` 被改动，安全默认未达标

- site-review-manifest.json 是否有新增改动：Yes
  - 跑前为空，跑后变为 `M docs/site-review-manifest.json`
  - 结论：本次运行后 manifest 被改脏；与“之前 5 条已加，因此这次不应再补条目”的预期不符

## 验证结果
- ✅ 默认 cleanup 是 dry-run
- ❌ figma-data 未被改动
- ❌ SUMMARY 提示了 dry-run

## 异常项（如有）
- Step 1 标题和 cleanup 脚本输出都表明它以 dry-run 运行，没有显示 `--apply`
- 但整条 pipeline 结束后，`figma-data/` 仍出现大量新增删除/修改，说明“默认安全模式”在整体效果上仍不安全
- `docs/site-review-manifest.json` 也在本次运行后变为已修改状态，需要进一步定位是 Step 3 写入，还是其它脚本链路带来的副作用
- SUMMARY 里的 dry-run 提示只出现在“全绿”分支；本次 Step 2 / Step 5 失败后，失败分支没有重复提示 `cleanup 仅 dry-run，未删任何 figma-data`
- pipeline 没有 fail-fast：Step 2 失败后仍继续执行了 Step 3/4/5，这一点符合预期
