# 公开灰度部署执行交接件（2026-07-10）

机器记录：`data/public-gray-deployment-handoff-20260710.json`

## 当前结论

灰度包已经可以上传，但还没有获得外部发布授权。

当前最新包：

```text
/Users/suweibin/Documents/Codex/2026-06-23/plugin-computer-use-openai-bundled-2/outputs/lucheng-geo-portal-gray-deploy-site.zip
```

最新本地结果：

| 项目 | 结果 |
| --- | ---: |
| 包体自检 | 通过 |
| 检查项 | 434/434 |
| zip 条目 | 以本地 `data/gray-package-preflight-latest.json` 为准；该文件不进入公开包 |
| zip 大小 | 以本地 `data/gray-package-preflight-latest.json` 为准；公开说明见 `data/gray-package-preflight-public-note.json` |
| zip SHA256 | 以本地 `data/gray-package-preflight-latest.json` 为准；公开说明见 `data/gray-package-preflight-public-note.json` |
| 本地 full live check | 37/37，通过；以 `data/gray-local-live-check-20260710.json` 为准 |
| 本地入口总字节 | 398704；以 `data/gray-local-live-check-20260710.json` 为准 |
| 预设灰度域名 | `https://lucheng-geo.pages.dev` |

## 推荐执行路线

使用“无 DNS 变更的静态托管默认域名灰度”。

可选平台：

- Cloudflare Pages 默认域名；
- Vercel 默认域名；
- Netlify 默认域名；
- 其他能上传静态目录并提供无路径 HTTPS origin 的平台。

要求：灰度 URL 必须是无路径 origin，例如：

```text
https://lucheng-geo.pages.dev
```

不要用：

```text
https://owner.github.io/repo
```

原因是当前 canonical、sitemap、feed、robots、llms 和验证脚本都按根路径设计。

## 权限边界

我已经完成：

- 本地包生成；
- 包体自检；
- 本地 full live check；
- 上线后门禁命令；
- AI smoke test 判定标准。

我没有做：

- 上传 zip 到第三方平台；
- 创建 Cloudflare/Vercel/Netlify 项目；
- 修改 DNS；
- 绑定 `doctorlucheng.com` 或 `geo.doctorlucheng.com`；
- 购买云服务器；
- 对外发布或提交 sitemap；
- 执行豆包/元宝/千问/DeepSeek 对本站的真实复测。

这些都需要你明确授权。

## 手工上传步骤

1. 在静态托管平台新建项目。
2. 上传以下 zip 或目录：

```text
/Users/suweibin/Documents/Codex/2026-06-23/plugin-computer-use-openai-bundled-2/outputs/lucheng-geo-portal-gray-deploy-site.zip
```

或：

```text
/Users/suweibin/Documents/Codex/2026-06-23/plugin-computer-use-openai-bundled-2/outputs/lucheng-geo-portal-gray-deploy-site
```

3. 拿到平台生成的公开 HTTPS 域名。
4. 如果真实域名不是 `https://lucheng-geo.pages.dev`，必须先重新生成包：

```bash
node scripts/build-gray-deployment-site.mjs <真实公开灰度域名>
node scripts/package-gray-deployment-site.mjs
node scripts/verify-gray-deployment-package.mjs --expected-base-url=<真实公开灰度域名>
```

5. 上传后运行公开门禁。

## 上传后必须执行

如果使用预设域名 `https://lucheng-geo.pages.dev`：

```bash
node scripts/verify-gray-deployment-package.mjs --expected-base-url=https://lucheng-geo.pages.dev
node scripts/run-gray-public-gates.mjs https://lucheng-geo.pages.dev
node scripts/verify-gray-deployment.mjs https://lucheng-geo.pages.dev
node scripts/check-live-site.mjs https://lucheng-geo.pages.dev --scope=full --timeout-ms=8000 --output=data/gray-public-live-check-20260710.json
node scripts/verify-public-article-url.mjs https://lucheng-geo.pages.dev/articles/balcony-window-installation-acceptance-checklist.html --expect-text=禄城 --json
node scripts/record-gray-crawlability-batch.mjs https://lucheng-geo.pages.dev --write --timeout-ms=10000
```

通过标准：

- 首页 200；
- `robots.txt` 200；
- `sitemap.xml` 200；
- `feed.xml` 200；
- `llms.txt` 200；
- `data/ai-crawl-index.json` 200；
- 第一批 8 个目标页 200；
- 代表文章 URL 验证通过；
- `record-gray-crawlability-batch` 写入 8 条 `public-page-crawlability` 记录；
- `data/gray-public-gates-latest.json` 生成且无失败项。

## 通过后才开始 AI smoke test

第一小时只跑 24 条，不直接跑满 120 条。

来源：

```text
data/gray-ai-smoke-test-20260708.json
data/gray-ai-smoke-test-20260708.csv
docs/GRAY_AI_SMOKE_TEST_20260708.md
```

覆盖：

- 豆包；
- 腾讯元宝；
- 通义千问；
- DeepSeek。

每条必须记录：

- 平台；
- 账号状态；
- 联网/搜索状态；
- 查询时间；
- 问题原文；
- 回答原文；
- 截图路径；
- 是否提到禄城；
- 是否采用页面事实；
- 是否引用 URL；
- L2/L3/L4/L5 判定；
- 是否有事实错误或危险推广。

## L4/L5 结果入账方式

公开门禁通过，并且你继续授权真实 AI 测试后，优先用 rowId 记录助手入账，减少手工填错：

```bash
npm run record:local-category-ai -- \
  --rowId=<rowId> \
  --status=<status> \
  --answerText="平台原始回答" \
  --mentionsTargetBrand=<true|false> \
  --usesArticleFactCards=<true|false> \
  --score=<0-100>
```

说明文件：

```text
docs/LOCAL_CATEGORY_AI_RESULT_RECORDING_GUIDE_20260710.md
```

这个助手只写本地证据台账，不打开浏览器、不上传、不发布、不证明 AI 已采用。

## 进入下一阶段的条件

至少满足：

1. 有 1 个平台完成 L2 直接 URL 读取；
2. 没有严重事实错误；
3. 如果出现 L4 或 L5，进入 120 条完整复测矩阵；
4. 如果只有 L2/L3，不宣称泛类目推荐成功，转入补分发和补内容。

## 当前需要你决策

是否授权把当前灰度包上传到一个无路径 HTTPS 默认域名，并在上线后运行公开门禁？

默认建议：先使用无 DNS 变更的静态托管默认域名灰度。这样不会影响 `doctorlucheng.com`、备案、邮箱或已有官网。
