# Phase 3：发布上线

完善插件元信息并发布到 Meegle 市场。用户在 publish 不可逆动作前必须显式确认。

> **Checkpoint**：本阶段每个子步骤执行前后都需要更新 `.lpm-cache/state.json`。

## 3.1 完善信息 → 进入 polish 子阶段

**Checkpoint 写入**：`{ "phase": 3, "step": "3.1", "stepName": "polish 子阶段", "nextStep": "3.1 完善插件名称/描述/分类" }`

**恢复检查**：`lastCommand` 含 `update-description` + `status="success"` → 跳到 3.2。

**进入 polish 子阶段**（**不要** Skill()，本 skill 内 Read 推进）：按序 Read

1. [`polish-analyze.md`](polish-analyze.md)（扫 `point.config.local.json` + `src/` 提取功能摘要）
2. [`polish-generate.md`](polish-generate.md)（AI 生成名称/短描述/详情/分类）
3. [`polish-confirm.md`](polish-confirm.md)（展示给用户确认或修改）
4. [`polish-apply.md`](polish-apply.md)（调 `lpm update-description` 落盘）

polish 子阶段自维护 analyze → generate → confirm → apply；编排层不复述子流程、不代为确认。完成后进入 3.2。

> **被 workflow 编排时**：polish 子阶段在 §3.1 进入，工程刚跑完 Phase 2 的 Stage Code，`src/` 必非空 → router 的「D1 src/ 空 gate」此处天然 OK，跳过该检查。

## 3.2 发布前二次确认（不可逆护栏 — 不可跳过）

polish 完成后，**MUST** 跑 `lpm check diff` 生成发布前总检清单、把 stdout 原样转呈用户并等待显式确认，才能进入 3.3 publish。

```bash
lpm --cwd "<projectRoot>" check diff
```

`lpm check diff` 产出 CLI 锚定的四段总检：**① 基本信息（名称/短描述/分类/点位/站点/版本）/ ② 配置覆盖（本地→远端最新草稿的点位增删改）/ ③ 权限变更 / ④ 运行时 URL 健康**。本节在 3.3 的 `update`（A1）之前，本地配置尚未推上远端，故②配置覆盖（本地→远端最新草稿的点位增删改）段此时有效、能看出本次发布会改什么。

- 把 check diff 的 stdout **整段原样**贴给用户——**不得改写、转述、增删或只摘要**（模板由 CLI 锚定）。
- `lpm check diff` 自身 `exit≠0`（取数失败）→ 视为**致命**，展示错误并终止，**不得**盲发。

**AI 硬约束**：
- ❌ **禁止**在用户未明确回复"确认发布" / "OK发布" / "好，发布吧"等肯定意图前执行 publish
- ❌ **禁止**把"开始 Phase 3"当作发布确认——Phase 3 开头的"开始吗"是 polish 的前置，不是 publish 的前置
- ✅ **必须**接受用户对四段中任一项的修改请求：改名称/分类 → 回 3.1 polish；权限不对 → `lpm perm apply`；URL 是占位 → 改配置后 `lpm local-config set`。改完回到 3.2 重跑 check diff 重新确认
- ✅ **必须**接受用户"取消"，终止 workflow（保留 checkpoint 供后续续跑）

只有用户明确同意发布后，才进入 3.3。

## 3.3 发布 → 进入 publish 子阶段

**前置**：3.2 的"确认发布"必须刚刚通过；从 checkpoint 恢复直插本节时，由 publish-apply 的 **A3 恢复护栏**重跑一次 `lpm check diff` 补确认（与 3.2 同源），未确认前不得执行 publish（W47）。

**Checkpoint 写入**：`{ "step": "3.3", "stepName": "publish 子阶段", "nextStep": "3.3 执行发布" }`

**进入 publish 子阶段**（**不要** Skill()，本 skill 内 Read 推进）：按序 Read

1. [`publish-pre-check.md`](publish-pre-check.md)（tsc 预检 + L1/L2/L3 自动修复；CLI `lpm publish` 已硬卡 metadata 完整性，PC0 异常 → 转 polish 子阶段后回流。注意闸门只在 publish——`lpm release` 零登录态、不做元信息预检）
2. [`publish-apply.md`](publish-apply.md)（A0 check diff 确认 → A1 update → A2 release → **A3 publish**；A0 与 3.2 同样跑 `lpm check diff`——3.2 刚走过故 A0 可跳过，但**从 checkpoint 恢复直插 A3 时，A3 的恢复护栏会重跑一次 `lpm check diff` 补确认**）
3. [`publish-verify.md`](publish-verify.md)（确认发布成功 + 分享链接格式）

publish 子阶段自维护 pre-check → apply → verify 的 checkpoint、恢复逻辑、版本号/描述默认值；编排层不复述、不传参。

## 3.4 完成

发布成功后删除 `.lpm-cache/state.json`，把 publish 输出的分享链接转呈用户。
